跳转至

你好,我是陈皓,网名左耳朵耗子。

微服务是分布式系统中最近比较流行的架构模型,也是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.jsVue.js
  • 后端Go语言 + 微服务工具集 Go kit ,因为是微服务了,所以,每个服务的代码就简单了。既然简单了,也就可以用任何语言了,所以,我推荐Go语言。
  • 通讯gRPC,这是Google远程调用的一个框架,它比Restful的调用要快20倍到50倍的样子。
  • APISwagger ,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和微服务的文章你也可以看看。

除此之外,我们还需要知道微服务和其它架构的一些不同和比较,这样我们就可以了解微服务架构的优缺点。下面几篇文章将帮助获得这些知识。

设计模式和最佳实践

然后,你可以看一下微服务的一些设计模式。

相关资源

小结

好了,总结一下今天的内容。我认为,微服务中有很多很不错的想法和理念,所以学习微服务是每一个技术人员迈向卓越的架构师的必经之路。在这篇文章中,我先给出了AWS、Microsoft和Pivotal对微服务的理解;然后给出了好几个系列的教程,帮你全面学习和理解微服务架构;然后通过一系列文章帮你来区分何为微服务,何为SOA;最后给出了微服务架构的设计模式和最佳实践,以及相关资源。相信通过这一系列内容的学习,你一定会对微服务有全面、透彻的理解。

下篇文章,我们将讲述的容器化和自动化运维方面的内容。敬请期待。

下面是《程序员练级攻略》系列文章的目录。

精选留言(15)
  • 沫沫(美丽人生) 👍(5) 💬(1)

    陈老师,作为一个落地方案,一个小公司,使用spring cloud怎么样?

    2018-08-06

  • 小鱼儿 👍(2) 💬(2)

    资料太多,可以精炼些!更多希望是老师自己经验和理解!

    2018-07-26

  • sipom 👍(2) 💬(1)

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

    2018-07-24

  • Yangjing 👍(109) 💬(0)

    用Go的点赞,看有多少人了

    2018-07-19

  • 离空气 👍(69) 💬(3)

    越来越觉得没什么干货了,都是罗列一些网站放在上面,没必要,我们要看的并不是这些

    2018-07-23

  • Hunter_wyg 👍(13) 💬(0)

    我觉得这些资料很有用,适合给对微服务有一些实践经验的工程师。相当于浩哥整理了知识框架,筛选出了有效资源,我们花点时间精读一下就能点亮知识地图。

    2018-07-31

  • 小薛薛 👍(8) 💬(0)

    老师什么时候能讲讲你的学习方法和时间管理吗? 因为我觉得学习效率很重要呢!

    2018-07-19

  • Nemo 👍(6) 💬(0)

    在我看来,文章里的链接里,有入门介绍,新手教程,实际应用,理论知识,而且每一项都给了不同的链接可以对照着看,可以更加宏观的了解微服务。这还要啥??还要别人划重点,然后告诉你,把这个背熟了,出去就可以喊30K了?合格的程序员逻辑思维要强,脑袋要转的快,举一反三,依靠自我驱动。

    2021-01-08

  • bensinos 👍(5) 💬(0)

    感觉Go会越来越流行

    2018-07-19

  • 手打丸子 👍(4) 💬(0)

    后几篇初看觉得是凑数的,迷茫时再看,简直指了条明路。不仅指明了方向,还上好了菜放好了资源。从业五年的飘过。

    2018-11-14

  • 天地乾坤 👍(4) 💬(0)

    太有帮助了,微服务是组成业务流程的最小自治域。是对传统mvc模式的颠覆。新项目,新架构都应该着手拥抱它。

    2018-07-19

  • 难得自然萌 👍(2) 💬(0)

    有经验的程序员还是从高手篇开始学习比较好,同时补充基础知识,小房子盖得再怎么精致也无法得到高楼大厦的经验

    2020-09-02

  • 难得自然萌 👍(2) 💬(0)

    太难了,一篇文章要花几个月甚至几年时间去消化,啊啊啊啊啊,加油皮卡丘

    2020-09-02

  • escray 👍(2) 💬(0)

    正在犹豫是否要买极客时间上的微服务专栏,价格有优惠,内容看上去也还好,只是自己并没有这方面的工作机会。回顾了一下这篇文章,感觉不用买了,先把这些来自源头的干货看了再说

    2018-08-31

  • yanfan_software 👍(2) 💬(0)

    微服务 配合 Docker 感觉已经是趋势了。。其实应该提提 Spring Cloud,主流组合

    2018-07-20