ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

架构-微服务:微服务架构技术栈

2019-10-31 15:54:46  阅读:165  来源: 互联网

标签:容器 服务 Spring 选型 技术 开源 token 架构


ylbtech-架构-微服务:微服务架构技术栈
1.返回顶部
1、

微服务架构技术栈

2019-07-09 • 347 浏览 • 7 评论

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

主要由下面七个模块组成:
311cb272432eea1b08d9fa45a3094ed1.png

微服务技术体系,粉红色标注的模块是和微服务关系最密切的模块:
7d7baf3c1e15265d1b576ca9b029a8a8.png

二、服务框架选型

1.基于 Spring 的框架本质上可以认为是一种 RESTFul 框架序列化协议主要采用基于文本的 JSON通讯协议一般基于 HTTP,RESTful 框架天然支持跨语言,任何语言只要有 HTTP 客户端都可以接入调用,但是客户端一般需要自己解析 payloadSwagger 自动生成 API 文档
feign

2.服务间调用 RPC 框架

  • dubbo 本质上是一套基于 Java 的 RPC 框架,协议 thrift/dubbo
  • dobbox,是当当扩展了 dubbo,支持了 RESTFul 接口暴露能力
  • thrift, 基于 thrift 协议跨语言 RPC 框架
  • TChannel,基于 thrift 协议跨语言 RPC 框架,对比 thrift,实现了调用链追踪,集群监控
  • Finagle
  • Hassian

三、运行时支撑服务选型

运行时支撑服务主要包括服务注册中心,服务路由网关和集中式配置中心三个产品。

1.服务注册中心

  • 如果采用 Spring Cloud 体系,选择 Eureka 是最佳搭配,Eureka 在 Netflix 经过大规模生产验证,支持跨数据中心,客户端配合 Ribbon 可以实现灵活的客户端软负载,但 Eureka2.0 已闭源,使用时,需考虑版本问题
  • Consul,基础架构中的一款服务发现和配置的工具
    • 服务发现:Consul client 可以提供服务,例如 API 或 MySQL,也可以使用 Consul client 来发现指定服务的提供者。 使用 DNS 或 HTTP,应用程序可以轻松找到他们所依赖的服务。
    • 健康检查:Consul client 可以提供任何数量的健康检查,或者与给定的服务(“Web 服务器是否返回 200 OK”),或与本地节点(“内存利用率是否低于 90%”)相关联。 可以使用此信息来监控集群运行状况,服务发现组件使用此信息将流量从有问题的主机中移除出去。
    • KV Store:应用程序可以使用 Consul 的分层键/值存储,包括动态配置,功能标记,协调,leader 选举等等。 简单的 HTTP API 使其易于使用。
    • 多数据中心:Consul 支持多个数据中心。 这意味着 Consul 的用户不必担心构建额外的抽象层以扩展到多个区域。

2.服务网关

  • zuul,Spring Cloud 体系,1.X
  • Kong,基于 Nginx/OpenResty,采用 nginx 内核,异步性能较强
  • Spring-Cloud-Gateway,性能比 zuul 好,完美兼容 Spring cloud 体系

3.配置中心

  • Spring-Cloud-Config,配合 Git 使用,需要 spring-cloud-bus 可实现配置事时生效
  • disconf,蚂蚁金服技术专家发起,但与 Spring boot 和 Spring cloud 相关性弱
  • apollo,携程开发,配置实时生效,携程经过生产级验证,且完美支持 Spring cloud

四、服务监控选型

主要包括日志监控,调用链监控,Metrics 监控,健康检查和告警通知等产品。

ELK 目前可以认为是日志监控的标配,功能完善开箱即用。Elastalert 是 Yelp 开源的针对 ELK 的告警通知模块。

调用链监控目前社区主流是点评 CAT,Twitter 之前开源现在由 OpenZipkin 社区维护的 Zipkin 和 Naver 开源的 Pinpoint。个人比较推荐点评开源的 CAT,在点评和国内多家互联网公司有落地案例,生产级特性和治理能力较完善,另外 CAT 自带告警模块。
bafa1b0f1e10e2de708c40590a8eb629.png

Metrics 监控主要依赖于时间序列数据库 (TSDB),目前较成熟的产品是 StumbleUpon 公司开源的基于 HBase 的 OpenTSDB(基于 Cassandra 的 KariosDB 也是一个选择,它基本上是 OpenTSDB 针对 Cassandra 的一个改造版),OpenTSDB 具有分布式能力可以横向扩展,但是相对较重,适用于中大规模企业。

OpenTSDB 本身不提供告警模块,Argus 是 Salesforce 开源的基于 OpenTSDB 的统一监控告警平台,支持丰富的告警函数和灵活的告警配置,可以作为 OpenTSDB 的告警补充。近年也出现一些轻量级的 TSDB,如 InfluxDB 和 Prometheus,这些产品函数报表能力丰富,自带告警模块,但是分布式能力不足,适用于中小规模企业。Grafana 是 Metrics 报表展示的社区标配。

五、服务容错选型

针对 Java 技术栈,Netflix 的 Hystrix 把熔断、隔离、限流和降级等能力封装成组件,任何依赖调用(数据库,服务,缓存)都可以封装在 Hystrix Command 之内,封装后自动具备容错能力。Hystrix 起源于 Netflix 的弹性工程项目,经过 Netflix 大规模生产验证,目前是容错组件的社区标准。其它语言栈也有类似 Hystrix 的简化版本组件。

Hystrix 一般需要在应用端或者框架内埋点,有一定的使用门槛。对于采用集中式反向代理(边界和内部)做服务路由的公司,则可以集中在反向代理上做熔断限流,例如采用 Nginx 或者 Kong 这类反向代理,它们都插件支持灵活的限流容错配置。Zuul 网关也可以集成 Hystrix 实现网关层集中式限流容错。集中式反向代理需要有一定的研发和运维能力,但是可以对限流容错进行集中治理,可以简化客户端。
Spring-Cloud-Gateway 内部已经集成 hystrix

六、后台服务选型

后台服务主要包括消息系统,分布式缓存,分布式数据访问层和任务调度系统。后台服务是一个相对比较成熟的领域,很多开源产品基本可以开箱即用。

1.消息系统

  • kafka 分布式架构
  • RocketMQ 分布式架构
  • RabbitMQ 主从架构
  • ActiveMQ 主从架构

2.分布式缓存

  • Redis,有搜狐开源的 cachecloud,统一管理
  • Memcached

3.分布式数据访问层

  • sharding-jdbc,当当开源,分库分表逻辑做在客户端 JDBC driver 中,客户端直连数据库比较简单轻量
  • MyCAT,mycat 是从阿里 Cobar 演化出来的社区开源分库分表中间件

4.任务调度系统

  • xxl-job,许雪里开源,部署简单轻量
  • elastic-job,当当开源

七、服务安全选型

对于微服务安全认证授权机制一块,目前业界虽然有 OAuth 和 OpenID connect 等标准协议,但是各家具体实现的做法都不太一样,企业一般有很多特殊的定制需求,整个社区还没有形成通用生产级开箱即用的产品。
大部分公司的做法都是基于 OAuth 和 OpenID connect 标准,在参考一些开源产品的基础上(例如 Mitre 开源的 OpenID-Connect-Java-Spring-Server),定制自研轻量级授权服务器。
Wso2 提出了一种微服务安全的参考方案,建议参考,该方案的关键步骤如下:
b70992e5727d45726ba7fcfb2b645f2a.png

  1. 使用支持 OAuth 2.0 和 OpenID Connect 标准协议的授权服务器(个人建议定制自研);
  2. 使用 API 网关作为单一访问入口,统一实现安全治理;
  3. 客户在访问微服务之前,先通过授权服务器登录获取 access token,然后将 access token 和请求一起发送到网关;
  4. 网关获取 access token,通过授权服务器校验 token,同时做 token 转换获取 JWT token。
  5. 网关将 JWT Token 和请求一起转发到后台微服务;
  6. JWT 中可以存储用户会话信息,该信息可以传递给后台的微服务,也可以在微服务之间传递,用作认证授权等用途;
  7. 每个微服务包含 JWT 客户端,能够解密 JWT 并获取其中的用户会话信息。
  8. 整个方案中,access token 是一种 by reference token,不包含用户信息可以直接暴露在公网上;JWT token 是一种 by value token,可以包含用户信息但不暴露在公网上。

八、服务部署平台选型

容器已经被社区接受为交付微服务的一种理想手段,可以实现不可变(immutable)发布模式。一个轻量级的基于容器的服务部署平台主要包括容器资源调度,发布系统,镜像治理,资源治理和 IAM 等模块。

集群资源调度系统:屏蔽容器细节,将整个集群抽象成容器资源池,支持按需申请和释放容器资源,物理机发生故障时能够实现自动故障迁移 (fail over)。目前 Google 开源的 Kubernetes,在 Google 背书和社区的强力推动下,基本已经形成市场领导者地位,社区的活跃度已经远远超过了 mesos 和 swarm 等竞争产品,所以容器资源调度建议首选 K8s。当然如果你的团队有足够定制自研能力,想深度把控底层调度算法,也可以基于 Mesos 做定制自研。

镜像治理:基于 Docker Registry,封装一些轻量级的治理功能。VMware 开源的 harbor 是目前社区比较成熟的企业级产品,在 Docker Registry 基础上扩展了权限控制,审计,镜像同步,管理界面等治理能力,可以考虑采用。

资源治理:类似于 CMDB 思路,在容器云环境中,企业仍然需要对应用 app,组织 org,容器配额和数量等相关信息进行轻量级的治理。目前这块还没有生产级的开源产品,一般企业需要根据自己的场景定制自研。

发布平台:面向用户的发布管理控制台,支持发布流程编排。它和其它子系统对接交互,实现基本的应用发布能力,也实现如蓝绿,金丝雀和灰度等高级发布机制。目前这块生产级的开源产品很少,Netflix 开源的 spinnaker 是一个,但是这个产品比较复杂重量(因为它既要支持适配对接各种 CI 系统,同时还要适配对接各种公有云和容器云,使得整个系统异常复杂),一般企业建议根据自己的场景定制自研轻量级的解决方案。

IAM:是 identity & access management 的简称,对发布平台各个组件进行身份认证和安全访问控制。社区有不少开源的 IAM 产品,比较知名的有 Apereo CAS,JBoss 开源的 keycloak 等。但是这些产品一般都比较复杂重量,很多企业考虑到内部各种系统灵活对接的需求,都会考虑定制自研轻量级的解决方案。

考虑到服务部署平台目前还没有端到端生产级解决方案,企业一般需要定制集成,下面给出一个可以参考的具备轻量级治理能力的发布体系:
e7266888cb698cab36eba57d5c0d9815.png

简化发布流程如下:

  1. 应用通过 CI 集成后生成镜像,用户将镜像推到镜像治理中心;
  2. 用户在资产治理中心申请发布,填报应用,发布和配额相关信息,然后等待审批通过;
  3. 发布审批通过,开发人员通过发布控制台发布应用;
  4. 发布系统通过查询资产治理中心获取发布规格信息;
  5. 发布系统向容器云发出启动容器实例指令;
  6. 容器云从镜像治理中心拉取镜像并启动容器;
  7. 容器内服务启动后自注册到服务注册中心,并保持定期心跳;
  8. 用户通过发布系统调用服务注册中心调拨流量,实现蓝绿,金丝雀或灰度发布等机制;
  9. 网关和内部微服务客户端定期同步服务注册中心上的服务路由表,将流量按负载均衡策略分发到新的服务实例上。

另外,持续交付流水线(CD Pipeline)也是微服务发布重要环节,这块主要和研发流程相关,一般需要企业定制,下面是一个可供参考的流水线模型,在镜像治理中心上封装一些轻量级的治理流程,例如只有通过测试环境测试的镜像才能升级发布到 UAT 环境,只有通过 UAT 环境测试的镜像才能升级发布到生产环境,通过在流水线上设置一些质量门,保障应用高质量交付到生产。

f378c7bb2707ea640ba2abf82facb70d.png

附录链接

  1. Spring Boot  
  2. Alibaba Dubbo  
  3. Thrift 
  4. Tchannel 
  5. NetflixOSS Eureka  
  6. Hashicorp Consul  
  7. NetflixOSS Zuul  
  8. Kong  
  9. Spring Cloud Gateway  
  10. Spring Cloud Config  
  11. CTrip Apollo  
  12. Disconf 
  13. ElasticSearch  
  14. Yelp Elastalert  
  15. Dianping CAT  
  16. Zipkin  
  17. Naver Pinpoint  
  18. OpenTSDB  
  19. KairosDB  
  20. Argus  
  21. InfluxDB  
  22. Prometheus  
  23. Grafana  
  24. Sensu  
  25. Esty 411  
  26. Zalando ZMon  
  27. NetflixOSS Hystrix  
  28. Nginx  
  29. Apache Kafka  
  30. Allegro Hermes  
  31. Apache Rocketmq  
  32. Rabbitmq  
  33. Sohutv CacheCloud  
  34. Twitter twemproxy  
  35. CodisLab codis  
  36. Dangdang Sharding-jdbc  
  37. MyCAT  
  38. Xxl-job  
  39. Dangdang elastic-job  
  40. Apereo CAS  
  41. JBoss keycloak  
  42. Spring cloud security  
  43. OpenID-Connect-Java-Spring-Server  
  44. Google Kubernetes  
  45. Apache Mesos  
  46. Vmware Harbor  
  47. Netflix Spinnaker  
  48. Microservices in Practice – Key Architecture Concepts of an MSA

-- 整理自杨波老师的微服务架构核心 20 讲

2、
2.返回顶部
 
3.返回顶部
 
4.返回顶部
 
5.返回顶部
1、 http://pipe.b3log.org/blogs/leifholic/articles/2019/07/09/1562651086547 2、  
6.返回顶部
 
warn 作者:ylbtech
出处:http://ylbtech.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

标签:容器,服务,Spring,选型,技术,开源,token,架构
来源: https://www.cnblogs.com/storebook/p/11771636.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有