架构师·2018 年 3 月刊
InfoQ
InfoQ 编辑部
10815 人已学习
限活动获得
架构师·2018 年 3 月刊
15
15
1.0x
00:00/00:00
登录|注册

微服务架构技术栈选型手册

一、前言

2014 年可以认为是微服务 1.0 的元年,当年有几个标志性事件,一是 Martin Fowler 在其博客上发表了”Microservices”一文,正式提出微服务架构风格;二是 Netflix 微服务架构经过多年大规模生产验证,最终抽象落地形成一整套开源的微服务基础组件,统称 NetflixOSS,Netflix 的成功经验开始被业界认可并推崇;三是 Pivotal 将 NetflixOSS 开源微服务组件集成到其 Spring 体系,推出 Spring Cloud 微服务开发技术栈。
一晃三年过去,微服务技术生态又发生了巨大变化,容器,PaaS,Cloud Native,gRPC,ServiceMesh,Serverless 等新技术新理念你方唱罢我登场,不知不觉我们又来到了微服务 2.0 时代。
基于近年在微服务基础架构方面的实战经验和平时的学习积累,我想总结并提出一些构建微服务 2.0 技术栈的选型思路,供各位在一线实战的架构师、工程师参考借鉴。对于一些暂时还没有成熟开源产品的微服务支撑模块,我也会给出一些定制自研的设计思路。

二、选型准则

对于技术选型,我个人有很多标准,其中下面三项是最重要的:
1. 生产级
我们选择的技术栈是要解决实际业务问题和上生产抗流量的(选择不慎可能造成生产级事故),而不是简单做个 POC 或者 Demo 展示,所以生产级(Production Ready),可运维(Ops Ready),可治理,成熟稳定的技术才是我们的首选;
2. 一线互联网公司落地产品
我们会尽量采用在一线互联网公司落地并且开源的,且在社区内形成良好口碑的产品,它们已经在这些公司经过流量冲击,坑已经基本被填平,且被社区接受形成一个良好的社区生态(本文附录部分会给出所有推荐使用或参考的开源项目的 GitHub 链接)。
3. 开源社区活跃度
GitHub 上的 stars 的数量是一个重要指标,同时会参考其代码和文档更新频率(尤其是近年),这些指标直接反应开源产品的社区活跃度或者说生命力。
另外,对于不同业务体量和团队规模的公司,技术选型标准往往是不同的,创业公司的技术选型和 BAT 级别公司的技术选型标准可能完全不同。本文主要针对日流量千万以上,研发团队规模不少于 50 人的公司,如果小于这个规模我建议认真评估是否真的需要采用微服务架构。考虑到 Java 语言在国内的流行度和我个人的背景经验,本文主要针对采用 Java 技术栈的企业。本文也假定自建微服务基础架构,有些产品其实有对应的云服务可以直接使用,自建和采用云服务各有利弊,架构师需要根据场景上下文综合权衡。

三、微服务基础架构关键点

下面脑图中芒果色标注的七个模块,我认为是构建微服务 2.0 技术栈的核心模块,本文后面的选型会分别基于这些模块展开。对于每个模块我也列出一些核心架构关注点,在选择具体产品时,需要尽可能覆盖到这些关注点。
下图是我近期工作总结和参考的一个微服务技术体系,我想同时分享给一线架构师或者工程师参考,其中粉红色标注的模块是和微服务关系最密切的模块,大家在做技术选型时,可以同时对照这个体系。

四、服务框架选型

服务框架是一个比较成熟的领域,有太多可选项。Spring Boot/Cloud[附录 12.1]由于 Spring 社区的影响力和 Netflix 的背书,目前可以认为是构建 Java 微服务的一个社区标准,Spring Boot 目前在 GitHub 上有超过 20k 星。
基于 Spring 的框架本质上可以认为是一种 RESTful 框架(不是 RPC 框架),序列化协议主要采用基于文本的 JSON,通讯协议一般基于 HTTP。RESTful 框架天然支持跨语言,任何语言只要有 HTTP 客户端都可以接入调用,但是客户端一般需要自己解析 payload。目前 Spring 框架也支持 Swagger 契约编程模型,能够基于契约生成各种语言的强类型客户端,极大方便不同语言栈的应用接入,但是因为 RESTful 框架和 Swagger 规范的弱契约特性,生成的各种语言客户端的互操作性还是有不少坑的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了构建微服务2.0技术栈的选型思路和关键模块,以及针对Java技术栈的企业的选型建议。作者提出了三项最重要的技术选型准则:生产级、一线互联网公司落地产品和开源社区活跃度。针对不同业务体量和团队规模的公司,作者建议技术选型标准可能不同。文章重点介绍了微服务基础架构的关键模块和服务框架选型,包括服务框架、运行时支撑服务和配置中心的选型建议。此外,还介绍了服务监控、服务容错、后台服务和服务安全等方面的选型建议。对于需要进行微服务架构选型的读者具有一定的参考价值。 在服务部署平台选型方面,文章详细介绍了容器资源调度、镜像治理、资源治理、发布平台和IAM等模块的选型建议。作者推荐了一些开源产品,并提出了一个具备轻量级治理能力的发布体系的参考模型。另外,持续交付流水线也被强调为微服务发布的重要环节,需要企业进行定制。文章还指出,技术选型只是微服务建设的一小部分工作,后续还需要进行大量的集成、定制、治理、运维和推广等工作。 总的来说,本文对构建微服务2.0技术栈的选型思路和关键模块进行了深入的探讨,为读者提供了丰富的选型建议和参考模型,对于需要进行微服务架构选型的读者具有很高的实用价值。文章内容详实,涵盖了微服务架构的多个方面,为读者提供了全面的技术指导和建议。

登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
大纲
固定大纲
一、前言
二、选型准则
三、微服务基础架构关键点
四、服务框架选型
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部