《提高能力,涨薪可待》-如何设计一个符合本身公司的微服务架构

欢迎关注掘金:【Ccww】,一块儿学习
提高能力,涨薪可待
面试知识,工做可待
实战演练,拒绝996
也欢迎关注微信公众号【Ccww笔记】,原创技术文章第一时间推出
若是此文对你有帮助、喜欢的话,那就点个赞呗!面试

前言

是否是感受在工做上难于晋升了呢?
是否是感受找工做面试是那么难呢?
是否是感受本身天天都在996加班呢?redis

在工做上必须保持学习的能力,这样才能在工做获得更好的晋升,涨薪指日可待,欢迎一块儿学习【提高能力,涨薪可待】系列spring

在找工做面试应在学习的基础进行总结面试知识点,工做也指日可待,欢迎一块儿学习【面试知识,工做可待】系列mongodb

最后,理论知识到准备充足,是否是该躬行起来呢?欢迎一块儿学习【实战演练,拒绝996】系列数据库

1.复杂性系统拆分微服务带来问题

使用微服务架构能够为咱们带了好处、便利的同时,但也带了不少挑战,新的问题。好比,微服务之间的调用和调用和通讯会不会很复杂? 通信模式,一对一仍是一对多的?依赖的服务没有准备好,如何验证个人开发功能?数据一致性的问题等等。 总结起来:后端

  • 微服务的粗细粒度难于掌握
  • 分布式的微服务增长了服务之间互相调用以及通讯的复杂性
  • 数据一致性问题
  • 测试复杂度提高,微服务集成关联
  • 运维复杂度陡增,部署数量多、监控进程致使总体运维复杂度提高
  • 依赖服务变动难于跟踪

为了解决这些问题,咱们在设计微服务架构时,必须进行全盘考虑,权衡利弊,这样才能作出合理的抉择,达到最佳的效果,从而达到咱们复杂系统微服务拆分的最终目的。接下来咱们来讨论讨论设计思想。缓存

2. 微服务划分方法

微服务架构设计首要任务根据给定的因素粗粒度将业务功能合理的划分微服务。每一个公司每一个复杂系统业务划分区域都不一样,但均可以基于这两种方式建立微服务:安全

  • 按照业务功能不一样水平划分-Rest API微服务:
    • 负责业务功能行为设计
    • 数据管理
    • 基于Rest协议对外提供接口
  • 基于Rest API微服务先后端分离垂直划分-Web UI微服务:
    • 专一于交互页面的设计
    • 基于Rest API微服务存取数据

基于分布式的高性能、高并发的设计,结合Rest API微服务和Web UI微服务能够构建一个适应任何规模访问的多维的稳定牢固,且扩展性良好的系统平台。性能优化

3. 微服务治理与统筹

在微服务设计中,微服务治理能力是相当重要的,甚至一个微服务系统好坏,取决微服务治理能力。可使用治理组件和服务来管理统筹庞大分布式系统,确保系统处于有序不乱、稳定而高效。服务器

这里只提供Spring Cloud基础组件(选择治理组件应该基于公司的状况而定),包括:

  • Eureka(微服务注册与发现):提供服务注册和发现的功能。
  • Ribbon(负载均衡):提供负载均衡调度管理的功能。
  • Zuul(微服务网关):提供网关服务和动态路由的功能。
  • Hystrix(微服务熔断):提供容错机制、服务降级、故障转移等功能。
  • Config(统一配置):提供统一的配置管理服务功能。
  • Sleuth(微服务跟踪):可用来监控集群中服务运行状况。

这些组件是如何进行微服务治理的呢?主要过程以下图:

4. 水平方向-Rest API微服务设计

Rest API微服务实现功能:

  • 负责业务功能行为设计
  • 数据管理
  • 基于Rest协议对外提供接口

Rest API微服务主要是关于涉及数据库,其中,数据管理基于数据库实现数据持久化。接口开发根据Restful规范使用GET、POST、PUT、DELETE对数据进行CRUD操做。

但最重要的如何设计Rest API微服务,其性能将对整个系统的性能相当重要,起决定性做用。这边提供一下方案:

  • 使用数据库集群和分组提供数据库访问性能:

    • 基于分布式架构集群,经过主从同步方式扩展数据库访问性能,多个只读从机缓解主机读写压力
    • 基于集群分组, 一般状况下,只有一个分组正常服务,其余做备份角色。
  • 数据库中间件实现读写分离

  • 使用数据缓存也是能够提搞数据存取性能,可以使用Redis等高性能的NoSQL数据库。但为了提供缓存的命中率,需遵照:

    • 不要在缓存中存取大容量的数据
    • 合理设置每一个缓存数据的有效时间,不将缓存数据作持久化。
  • 保持Rest API微服务的独立性,禁止在Rest API微服务中之间进行互相调用。

5. 垂直方向-Web UI微服务设计

基于Rest API微服务先后端分离的垂直划分-Web UI微服务包括两个功能:

  • 专一于交互页面的设计
  • 基于Rest API微服务存取数据

在设计Web UI微服务主要考虑是高并发的问题,能够经过如下方法来实现高并发:

  • 在Rest API微服务,使用FeignClient实现负载均衡调用。FeignClient自动实现了Zuul动态路由和Ribbon负载均衡服务

  • 使用Hystrix组件实现断路器的设计,提供对服务访问容错设计和降级使用机制。

  • 使用非阻塞的异步调用实现高并发

  • 使用分布式文件系统,将图片、视频等资料独立一个分布式文件系统管理。好比,FastDFS。

6. 微服务之间调用规则

为了保证各个微服务的独立性,并减小通讯的复杂性,提升微服务之间的调用效率,咱们对微服务之间的调用,遵循以下规定:

  • 服务之间主要有Web UI微服务对Rest API微服务调用,一个Web UI微服务能够并发调多个Rest API。
  • 为了保证Rest API的高性能特性,同时避免Rest API变动影响,禁止Rest API之间互相调用,Rest API之间只能经过MQ进行互相通讯
  • Web UI之间可以使用与之对应的实例进行相互跳转,还能够进行负载均衡管理。

7. 数据最终一致性设计

对于微服务的多服务架构数据需确保数据一致性,能够基于CAP原理的BASE理论来合理设计。具体实现操做:

  • 经过调用各个Rest API实现实时同步操做
  • 使用消息通道以事件响应的方式进行异步处理。

CAP(Consistency,Availability,Partition tolerance)即一致性、可用性、分区容错性三者不可兼得
BASE(Basically Avaiable,Soft state,Eventually consistent)即基本可用、软状态、最终一致性。BASE是对CAP中一致性和可用性进行权衡的结果

8. 分布式集群架构设计

经过微服务的治理环境,每一个微服务能够多副本发布在同一个局域网之中,或者跨区域、跨机房分布等搭建成一个稳定可靠并可持续扩展的系统平台。以下图:

9.微服务安全设计

安全设计方面,能够包括:

  • 防火墙设计
  • 防攻击设计
  • 访问控制设计
  • 数据保密设计

防火墙设计是系统安全的第一道屏障,可使用防火墙为微服务架构的服务器提供一个安全可靠的分布式环境,以下图:

欢迎关注微信公众号【Ccww笔记】,原创技术文章第一时间推出。

相关文章
相关标签/搜索