0%

服务架构从小到大演变过程

[toc]

1、 单机架构#

server、文件、mysql都在同一台物理服务器上。
用于前期研发测试、或者访问量较小的内部管理页网站等。

2、 集群架构(水平扩充)#

这里的集群,是指各节点服务的处理能力完全一致,单纯提升业务的水平处理能力。

集群架构需要做以下重点改造:

  1. 业务处理服务器 server 无状态化+集群化, 部署多台对等节点。
  2. 设置负载均衡调度服务,用于专门的负载均衡,例如ngnix自带负载均衡设置
  3. 负载均衡调度服务也要可靠, 可利用公共的公网流量接入组件(apig、elb、slb)来负责做负载均衡服务的dns轮询。
  4. 缓存使用设置分布式redis
  5. mysql数据库做到主从分离。
  6. 静态文件下放到cdn节点, 由ISP互联网服务提供商进行下发,提升响应速度。

3、 垂直拆分#

Q: 业务逻辑全部耦合在一个服务中有什么缺点?#

A:某个无关紧要的业务,可能因为请求量突然过大,导致影响了所有业务的使用 。 例如ths的cs里同时包含了用户埋点数据采集转发的业务逻辑, 如果这块流量突然过大, 可能导致正常行情数据都无法使用。


大型电商的拆分逻辑举例#

首页、用户、搜索、广告、购物、订单、商品、收益结算
2bf084dadd4bdf645c9643d71b5a8d76e11a7855


Q: 业务拆分得越细越好吗, 会有什么问题?#

A:
维护成本会很大,并且数据库改造等都需要跟上,有时候要考虑工期进度、以及必要性等。

4、服务化架构#

什么是服务化?#

Service-Oriented Architecture SOA架构

面向服务的架构#

可以理解为将原本的 controller- service- dao 这个过程再做拆分, 抽出公共的数据或者业务提供服务, 提供给其他服务使用。

从mvc上理解时,可以是将dao层独立成一个服务, 其他服务不再需要自己重复写dao代码,而是直接调数据获取接口即可。 这样数据获取的逻辑只要改单个服务即可,不需要多个服务同时修改。

代价就是服务间存在大量依赖关系,需要引入服务治理能力。
如何通俗易懂地解释什么是SOA


Q: 集群和分布式的区别是什么?#

A:
集群是把多台服务器集中在一起, 目的是实现同一个业务。
分布式是把不同的业务分布在不同的地方, 目的是实现不同的业务。

分布式中的每个节点都可以构成一个集群
但是集群却不一定是分布式的。


Q: 微服务和分布式的区别是什么?#

A:
微服务是“架构设计”方式,分布式是“系统部署”方式,两者概念不同

微服务是指很小的服务,可以小到只完成一个功能,这个服务可以单独部署运行,不同服务之间通过rpc调用。

分布式是指服务部署在不同的机器上,一个服务可以提供一个或多个功能,服务之间也是通过rpc来交互或者是webservice来交互的。

两者的关系是,系统应用部署在“超过一台”服务器或虚拟机上,且各分开部署的部分彼此通过各种通讯协议交互信息,就可算作分布式部署
生产环境下的微服务肯定是分布式部署的,分布式部署的应用不一定是微服务架构的,比如集群部署,它是把相同应用复制到不同服务器上,但是逻辑功能上还是单体应用。

简答来说

  • 微服务——拆出多种业务,不管几台机器
  • 集群——1种业务,拆到多台机器
  • 分布式—— x种业务,拆到1台以上,且业务之间有关联。 分布式不一定是微服务,集群也不一定是分布式, 但是分布式一定满足集群,因为机器数量肯定大于1。

Q: APIG网关接入层的作用是什么?#

A:

  • 当业务拆分复杂时, 可通过APIG网关确定转发逻辑, 不用维护webServer的公共逻辑。
  • 灰度发布(配置白名单或者正则,将部分用户请求导入到灰度环境)
  • 流控
  • 安全防护

避免webServer做过多的安全修复和改造,通过网关保证外部输入安全。