微服务架构 逃离我推掉我的手 2022-04-22 10:46 535阅读 0赞 # 微服务架构 # 微服务架构在关注技术之前**需要首先考虑**: 是服务的边界、职责划分,划分错误就会陷入大量的服务间的相互调用和分布式事务中,这种情况微服务带来的不是便利而是麻烦。而不是RPC/ServiceDiscovery/Circuit Breaker这些概念,也不是Eureka/Docker/SpringCloud/Zipkin这些技术框架。 ## 微服务的特点 ## 1.单一职责。单个服务尽量专注一件事情,高内聚、低耦合; 2.进程隔离; 3.独立性。每个服务可以独立的开发、测试、构建、部署; 4.小且灵活; ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01lbWVyeV9sYXN0_size_16_color_FFFFFF_t_70] ## 优点 ## 1.交付周期。 每个服务可以独立的开发、测试和交付,降低周期; 2.快速沟通小团队开发,降低代码耦合度导致的沟通成本。 业务按服务拆分,新人不需要了解整体架构,上手快; 3.定制化。 可以根据市场需求,灵活多变的组合出新的业务场景; 4.隔离性进程隔离方式,故障范围有效控制; 5.技术栈可以根据需求按服务选择不同技术栈; 6.演进优化可以按照服务粒度进行演进优化; ## 微服务基础架构关键点 ## ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01lbWVyeV9sYXN0_size_16_color_FFFFFF_t_70 1] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01lbWVyeV9sYXN0_size_16_color_FFFFFF_t_70 2] **支撑的服务框架:** 1)RPC调用框架&服务注册发现 2)集中配置 3)容错限流 4)认证授权 5)日志聚合 6)监控告警 7)消息中间件 8)缓存集群 9)任务调度 10)DB数据存储 ## 服务框架选型 ## ### RPC调用框架 ### **Spring Boot/Cloud** 基于 Spring 的框架本质上可以认为是一种 RESTful 框架(不是 RPC 框架),序列化协议主要采用基于文本的 JSON,通讯协议一般基于 HTTP **Dubbo** 面向java技术栈,高性能、企业级的服务治理能力 **Motan** 新浪微博开源RPC,轻量级的RPC ## 运行时支撑服务选型 ## ### 服务注册中心 ### ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01lbWVyeV9sYXN0_size_16_color_FFFFFF_t_70 3] **Eureka** Spring Cloud 体系,则选择 Eureka 是最佳搭配, Eureka 在 Netflix 经过大规模生产验证,支持跨数据中心,客户端配合 **Ribbon 可以实现灵活的客户端软负载** ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01lbWVyeV9sYXN0_size_16_color_FFFFFF_t_70 4] Eureka 高可用集群 当注册中心不可用的时候,会影响新服务、与异常机器的发现和下线。 多个Eureka服务相互注册,相互复制,**replicate** **Zookeeper** 1)启动时期的leader选举 2)运行时期的Leader选举 在Zookeeper运行期间,Leader与Follower服务器各司其职,即便当有非Leader服务器宕机或新加入,此时也不会影响Leader,但是一旦Leader服务器挂了,那么**整个集群将暂停对外服务**(*不满足可用性*),进入新一轮Leader选举,其过程和启动时期的Leader选举过程基本一致。假设正在运行的有Server1、Server2、Server3三台服务器,当前Leader是Server2,若某一时刻Leader挂了,此时便开始Leader选举。 关于选举算法,看不太懂,参考:[http://www.cnblogs.com/leesf456/p/6107600.html][http_www.cnblogs.com_leesf456_p_6107600.html] **Eureka 与Zookeep的区别** <table> <thead> <tr> <th></th> <th>从CAP理论的角度阐述</th> </tr> </thead> <tbody> <tr> <td>EureKa</td> <td>可用性A、分区容错性P,可以保证最终一致性</td> </tr> <tr> <td>Zookeeper</td> <td>一致性C、分区容错性P</td> </tr> </tbody> </table> ### 服务网关 ### (此处懵比) **Zuul** Zuul 在 Netflix 经过大规模生产验证,支持灵活的动态过滤器脚本机制,异步性能不足。 ### 配置中心 ### **Spring Cloud Config** 算不上生产级,很多治理能力缺失,小规模场景可以试用 **携程的 Apollo 配置中心** 在携程经过生产级验证,具备高可用,配置实时生效(推拉结合),配置审计和版本化,多环境多集群支持等生产级特性,建议中大规模需要对配置集中进行治理的企业采用。 ## 服务监控选型 ## ### 日志监控 ### ELK 目前可以认为是日志监控的标配,功能完善开箱即用,ElasticSearch 目前在 GitHub 上有超过 28.4k 星。Elastalert(GitHub 4k stars) 是 Yelp 开源的针对 ELK 的告警通知模块。 ### 调用链监控 ### CAT(推荐) 个人比较推荐点评开源的 CAT,在点评和国内多家互联网公司有落地案例,生产级特性和治理能力较完善,另外 CAT 自带告警模块。 OpenZipkin——Twitter 之前开源现在由 OpenZipkin Zipkin Pinpoint——Naver 开源的 Pinpoint ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01lbWVyeV9sYXN0_size_16_color_FFFFFF_t_70 5] ### Metrics 监控 ### 用来监控整个系统在哪个地方,哪台机器上,花了多少CPU、内存、磁盘IO或者网络带宽等资源 主要依赖于时间序列数据库 (TSDB),如Hbase 目前较成熟的产品是 StumbleUpon 公司开源的**基于 HBase 的 OpenTSDB** OpenTSDB 本身不提供告警模块,Argus(GitHub 0.29k 星)是 Salesforce 开源的基于 OpenTSDB 的统一监控告警平台,支持丰富的告警函数和灵活的告警配置,可以作为 OpenTSDB 的告警补充 近年也出现一些**轻量级的 TSDB**,如 InfluxDB(GitHub 12.4k stars)和 Prometheus(GitHub 14.3k stars),这些产品函数报表能力丰富,自带告警模块,但是分布式能力不足,适用于中小规模企业。Grafana(GitHub 19.9k stars)是 Metrics 报表展示的社区标配。 **通用的健康检查和告警产品** **Sensu**(GitHub 2.7k stars),能够对各种服务(例如 Spring Boot 暴露的健康检查端点,时间序列数据库中的 metrics,ELK 中的错误日志等)定制灵活的健康检查 (check),然后用户可以针对 check 结果设置灵活的告警通知策略。 ## 服务容错的选型 ## 看不懂 针对 Java 技术栈,**Netflix 的 Hystrix**(github 12.4k stars)把熔断、隔离、限流和降级等能力封装成组件,任何依赖调用(数据库,服务,缓存)都可以封装在 Hystrix Command 之内,封装后自动具备容错能力。Hystrix 起源于 Netflix 的弹性工程项目,经过 Netflix 大规模生产验证,目前是容错组件的社区标准,GitHub 上有超 12k 星。其它语言栈也有类似 Hystrix 的简化版本组件。 ### 后台服务选型 ### #### 消息中间件 #### **Kafka** 对于日志等可靠性要求不高的场景,则 Apache 顶级项目 Kafka(GitHub 7.2k stars)是社区标配。 **RocketMQ** 阿里开源的 RocketMQ(GitHub 3.5k 星)也是一个不错选择,具备更多适用于业务场景的特性,目前也是 Apache 顶级项目。RabbitMQ(GitHub 3.6k 星)是老牌经典的 MQ,队列特性和文档都很丰富,性能和分布式能力稍弱,中小规模场景可选。 #### 分布式缓存 #### **cachecloud** 对于缓存治理,如果倾向于采用客户端直连模式(个人认为缓存直连更简单轻量),则 SohuTv 开源的 cachecloud(GitHub 2.5k stars)是一款不错的 Redis 缓存治理平台,提供诸如监控统计,一键开启,自动故障转移,在线伸缩,自动化运维等生产级治理能力,另外其文档也比较丰富。 **twemproxy** 如果倾向采用中间层 Proxy 模式,则 Twitter 开源的 twemproxy(GitHub 7.5k stars)和 CodisLab 开源的 codis(GitHub 6.9k stars)是社区比较热的选项。 #### 分布式数据库访问层 #### **shardingjdbc** 如果采用 Java 技术栈,则当当开源的 shardingjdbc(GitHub 3.5k stars)是一个不错的选项,分库分表逻辑做在客户端 jdbc driver 中,客户端直连数据库比较简单轻量,建议中小规模场景采用。 **MyCAT** 如果倾向采用数据库访问中间层 proxy 模式,则从阿里 Cobar 演化出来的社区开源分库分表中间件 MyCAT(GitHub 3.6k stars)是一个不错选择 。proxy 模式运维成本较高,建议中大规模场景,有一定框架自研和运维能力的团队采用。 #### 任务调度系统 #### **xxl-job** 任务调度系统,个人推荐徐雪里开源的 xxl-job(GitHub 3.4k stars),部署简单轻量,大部分场景够用。 **elastic-job** 当当开源的 elastic-job(GitHub 3.2k stars)也是一个不错选择,相比 xxl-job 功能更强一些也更复杂。 还有其它服务的选择模块,此处不再讲述 参考:[https://www.zhihu.com/question/65502802][https_www.zhihu.com_question_65502802] [http://www.importnew.com/26407.html][http_www.importnew.com_26407.html] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01lbWVyeV9sYXN0_size_16_color_FFFFFF_t_70]: /images/20220422/5910fe258c374004a863630086c7c7a9.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01lbWVyeV9sYXN0_size_16_color_FFFFFF_t_70 1]: /images/20220422/8a5b89facbae438a8ac0876921fc3947.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01lbWVyeV9sYXN0_size_16_color_FFFFFF_t_70 2]: /images/20220422/d24b3574c18f49b6a207dbe04e3d5f10.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01lbWVyeV9sYXN0_size_16_color_FFFFFF_t_70 3]: /images/20220422/a05f58b414074d8bb7e88907954f6f4e.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01lbWVyeV9sYXN0_size_16_color_FFFFFF_t_70 4]: /images/20220422/6e0cf35f8fc749fba556a5d8aed23b9c.png [http_www.cnblogs.com_leesf456_p_6107600.html]: http://www.cnblogs.com/leesf456/p/6107600.html [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01lbWVyeV9sYXN0_size_16_color_FFFFFF_t_70 5]: /images/20220422/30421e26182b4f9c9a5260bd75f05572.png [https_www.zhihu.com_question_65502802]: https://www.zhihu.com/question/65502802 [http_www.importnew.com_26407.html]: http://www.importnew.com/26407.html
相关 【微服务】微服务架构设计 文章目录 背景 一、流量入口Nginx 二、网关 三、业务组件 四、服务注册中心 五、缓存和分布式锁 六、数据持久层 七、 亦凉/ 2023年10月12日 18:07/ 0 赞/ 144 阅读
相关 微服务架构 — 微服务框架 目录 文章目录 目录 微服务框架 第一代微服务框架 Spring Cloud Dubbo 下一代微服务框架 — S 迈不过友情╰/ 2023年10月05日 04:47/ 0 赞/ 103 阅读
相关 架构:微服务架构 系统架构设计描述了在应用系统的内部,如何根据业务、技术、组织、灵活性、可扩展性以及可维护性等多种因素,将应用系统划分成不同的部分,并使这些部分彼此之间相互分工、相互协作,从而为 古城微笑少年丶/ 2023年07月10日 08:59/ 0 赞/ 82 阅读
相关 微服务架构 Microservices a definition of this new architectural term The term "Microservice Arc 忘是亡心i/ 2022年07月13日 06:08/ 0 赞/ 601 阅读
相关 微服务架构 微服务架构 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术 £神魔★判官ぃ/ 2022年04月25日 07:06/ 0 赞/ 333 阅读
相关 微服务架构 [微服务架构核心20讲][20] -------------------- 01 | 微服务定义 微服务是一种架构风格 大中台,小前台 > 定义一 一 港控/mmm°/ 2022年04月24日 04:08/ 0 赞/ 469 阅读
相关 微服务与微服务架构 什么是微服务? > 微服务的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是 偏执的太偏执、/ 2021年12月17日 05:59/ 0 赞/ 659 阅读
相关 微服务架构 1、微服务简介 微服务是一种软件架构模式。 它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和 た 入场券/ 2021年11月17日 08:02/ 0 赞/ 544 阅读
相关 微服务架构 一、先了解一下什么是单体应用 就是一个应用程序包含了所有模块功能,各模块同时部署。当然这种应用模式比较容易部署、测试,但随着项目的加大,单体模式就会变得越来越臃肿,维护的成 古城微笑少年丶/ 2021年09月23日 07:40/ 0 赞/ 654 阅读
还没有评论,来说两句吧...