极客时间已完结课程限时免费阅读

84 | 程序员练级攻略:微服务

84 | 程序员练级攻略:微服务-极客时间

84 | 程序员练级攻略:微服务

讲述:杨超

时长07:37大小6.96M

你好,我是陈皓,网名左耳朵耗子。
微服务是分布式系统中最近比较流行的架构模型,也是 SOA 架构的一个进化。微服务架构并不是银弹,所以,也不要寄希望于微服务架构能够解决所有的问题。微服务架构主要解决的是如何快速地开发和部署我们的服务,这对于一个能够适应快速开发和成长的公司是非常必要的。同时我也觉得,微服务中有很多很不错的想法和理念,所以学习微服务是每一个技术人员迈向卓越的架构师的必经之路。
首先,你需要看一下,Martin Fowler 的这篇关于微服务架构的文档 - Microservice Architecture (中译版),这篇文章说明了微服务的架构与传统架构的不同之处在于,微服务的每个服务与其数据库都是独立的,可以无依赖地进行部署。你也可以看看 Martin Fowler 老人家现身说法的视频。
另外,你还可以简单地浏览一下,各家对微服务的理解。

微服务架构

接下来,你可以看一下 IBM 红皮书:Microservices Best Practices for Java ,这本书非常好,不但有通过把 Spring Boot 和 Dropwizard 来架建 Java 的微服务,而且还谈到了一些标准的架构模型,如服务注册、服务发现、API 网关、服务通讯、数据处理、应用安全、测试、部署、运维等,是相当不错的一本书。
当然,有一本书你也可以读一下—— 微服务设计。这本书全面介绍了微服务的建模、集成、测试、部署和监控,通过一个虚构的公司讲解了如何建立微服务架构。主要内容包括认识微服务在保证系统设计与组织目标统一上的重要性,学会把服务集成到已有系统中,采用递增手段拆分单块大型应用,通过持续集成部署微服务,等等。
与此相似的,也有其它的一系列文章,值得一读。
下面是 Nginx 上的一组微服务架构的系列文章。
下面这是 Auto0 Blog 上一系列的微服务的介绍,有代码演示。
还有 Dzone 的这个 Spring Boot 的教程。
当然,如果你要玩得时髦一些的话,我推荐你使用下面的这套架构。
前端:React.js 或 Vue.js。
后端:Go 语言 + 微服务工具集 Go kit ,因为是微服务了,所以,每个服务的代码就简单了。既然简单了,也就可以用任何语言了,所以,我推荐 Go 语言。
通讯:gRPC,这是 Google 远程调用的一个框架,它比 Restful 的调用要快 20 倍到 50 倍的样子。
API:Swagger ,Swagger 是一种 Restful API 的简单但强大的表示方式,标准的,语言无关,这种表示方式不但人可读,而且机器可读。可以作为 Restful API 的交互式文档,也可以作为 Restful API 形式化的接口描述,生成客户端和服务端的代码。今天,所有的 API 应该都通过 Swagger 来完成。
网关:Envoy 其包含了服务发现、负载均衡和熔断等这些特性,也是一个很有潜力的网关。当然,Kubernetes 也是很好的,而且它也是高扩展的,所以,完全可以把 Envoy 通过 Ingress 集成进 Kubernetes。这里有一个开源项目就是干这个事的 - contour。
日志监控:fluentd + ELK 。
指标监控:Prometheus 。
调用跟踪:Jaeger 或是 Zipkin,当然,后者比较传统一些,前者比较时髦,最重要的是,其可以和 Prometheus 和 Envory 集成。
自动化运维:Docker + Kubernetes 。

微服务和 SOA

在对微服务有了一定的认识以后,一定有很多同学分不清楚微服务和 SOA 架构,对此,你可以看一下这本电子书 - 《Microservices vs. Service-Oriented Architecture》。通过这本书,你可以学到,服务化架构的一些事实,还有基础的 SOA 和微服务的架构知识,以及两种架构的不同。这本书的作者马克·理查兹(Mark Richards)同学拥有十年以上的 SOA 和微服务架构的设计和实现的经验。
另外,还有几篇其它对比 SOA 和微服务的文章你也可以看看。
除此之外,我们还需要知道微服务和其它架构的一些不同和比较,这样我们就可以了解微服务架构的优缺点。下面几篇文章将帮助获得这些知识。

设计模式和最佳实践

然后,你可以看一下微服务的一些设计模式。
Microservice Patterns,微服务架构的设计模式和最佳实践。
Microservice Antipatterns and Pitfalls,微服务架构的一些已知的反模式和陷阱。
Microservice Architecture: All The Best Practices You Need To Know,这是一篇长文,里面讲述了什么是微服务、微服务架构的优缺点、微服务最大的挑战和解决方案是什么、如何避免出错,以及构建微服务架构的最佳实践等多方面的内容。推荐阅读。
Best Practices for Building a Microservice Architecture ,这篇文章分享了构建微服务架构的最佳实践。
Simplicity by Distributing Complexity,这是一篇讲如何使用事件驱动构建微服务架构的文章,其中有很多不错的设计上的基本原则。

相关资源

Microservices Resource Guide ,这个网页上是 Martin Fowler 为我们挑选的和微服务相关的文章、视频、书或是 podcast。
Awesome Microservices ,一个各种微服务资源和相关项目的集中地。

小结

好了,总结一下今天的内容。我认为,微服务中有很多很不错的想法和理念,所以学习微服务是每一个技术人员迈向卓越的架构师的必经之路。在这篇文章中,我先给出了 AWS、Microsoft 和 Pivotal 对微服务的理解;然后给出了好几个系列的教程,帮你全面学习和理解微服务架构;然后通过一系列文章帮你来区分何为微服务,何为 SOA;最后给出了微服务架构的设计模式和最佳实践,以及相关资源。相信通过这一系列内容的学习,你一定会对微服务有全面、透彻的理解。
下篇文章,我们将讲述的容器化和自动化运维方面的内容。敬请期待。
下面是《程序员练级攻略》系列文章的目录。
分享给需要的人,Ta购买本课程,你将得29元
生成海报并分享

赞 12

提建议

上一篇
83 | 程序员练级攻略:分布式架构工程设计
下一篇
85 | 程序员练级攻略:容器化和自动化运维
unpreview
 写留言

精选留言(30)

  • Yangjing
    2018-07-19
    用Go的点赞,看有多少人了
    104
  • 离空气
    2018-07-23
    越来越觉得没什么干货了,都是罗列一些网站放在上面,没必要,我们要看的并不是这些
    共 3 条评论
    66
  • Hunter_wyg
    2018-07-31
    我觉得这些资料很有用,适合给对微服务有一些实践经验的工程师。相当于浩哥整理了知识框架,筛选出了有效资源,我们花点时间精读一下就能点亮知识地图。
    12
  • 小薛薛
    2018-07-19
    老师什么时候能讲讲你的学习方法和时间管理吗? 因为我觉得学习效率很重要呢!
    8
  • bensinos
    2018-07-19
    感觉Go会越来越流行
    5
  • Nemo
    2021-01-08
    在我看来,文章里的链接里,有入门介绍,新手教程,实际应用,理论知识,而且每一项都给了不同的链接可以对照着看,可以更加宏观的了解微服务。这还要啥??还要别人划重点,然后告诉你,把这个背熟了,出去就可以喊30K了?合格的程序员逻辑思维要强,脑袋要转的快,举一反三,依靠自我驱动。
    5
  • 手打丸子
    2018-11-14
    后几篇初看觉得是凑数的,迷茫时再看,简直指了条明路。不仅指明了方向,还上好了菜放好了资源。从业五年的飘过。
    4
  • 沫沫(美丽人生)
    2018-08-06
    陈老师,作为一个落地方案,一个小公司,使用spring cloud怎么样?

    作者回复: 可以啊

    4
  • 天地乾坤
    2018-07-19
    太有帮助了,微服务是组成业务流程的最小自治域。是对传统mvc模式的颠覆。新项目,新架构都应该着手拥抱它。
    4
  • 难得自然萌
    2020-09-02
    太难了,一篇文章要花几个月甚至几年时间去消化,啊啊啊啊啊,加油皮卡丘
    2
  • escray
    2018-08-31
    正在犹豫是否要买极客时间上的微服务专栏,价格有优惠,内容看上去也还好,只是自己并没有这方面的工作机会。回顾了一下这篇文章,感觉不用买了,先把这些来自源头的干货看了再说
    2
  • 小鱼儿
    2018-07-26
    资料太多,可以精炼些!更多希望是老师自己经验和理解!

    作者回复: 这已经删掉了7成了

    共 2 条评论
    2
  • sipom
    2018-07-24
    真的建议浩哥增加分享一些在自己工作中运用这些技术的心得体会、经验教训,这些信息对缺少经验的人很难得、很珍贵。

    作者回复: 对于分布式微服的坑和经验教训,注意点,难题,解决方案,我全部写在了之前的分布式系列的文章中了。

    2
  • yanfan_software
    2018-07-20
    微服务 配合 Docker 感觉已经是趋势了。。其实应该提提 Spring Cloud,主流组合
    2
  • 难得自然萌
    2020-09-02
    有经验的程序员还是从高手篇开始学习比较好,同时补充基础知识,小房子盖得再怎么精致也无法得到高楼大厦的经验
    1
  • czh
    2020-01-27
    这样知识罗列收获最大的应该是有基础的人,因为能够把知识系统的整理一次。对于初学者来说就不太友好了吧
    1
  • 天使也有爱
    2019-11-01
    一枚嵌入式工程师也来学习
    1
  • hehai
    2018-09-04
    搜索一下microservices,前两页就是这些文章。希望看到干货
    1
  • 怀揣梦想的学渣
    2022-04-02
    难以想象这是2018年写的文章,即便是在2022年的今天,k8s也是主流运维技术需求。不仅在一些业务场景用,更是在研发私有云的构建上使用。它是部分业务场景的主力软件,不局限于运维工作。
    1
  • shasharoman
    2022-02-11
    这种文章风格,让我想到了无为而为!!!感谢老师