[toc]
1、 单机架构#
server、文件、mysql都在同一台物理服务器上。
用于前期研发测试、或者访问量较小的内部管理页网站等。
2、 集群架构(水平扩充)#
这里的集群,是指各节点服务的处理能力完全一致,单纯提升业务的水平处理能力。
集群架构需要做以下重点改造:
- 业务处理服务器 server 无状态化+集群化, 部署多台对等节点。
- 设置负载均衡调度服务,用于专门的负载均衡,例如ngnix自带负载均衡设置
- 负载均衡调度服务也要可靠, 可利用公共的公网流量接入组件(apig、elb、slb)来负责做负载均衡服务的dns轮询。
- 缓存使用设置分布式redis
- mysql数据库做到主从分离。
- 静态文件下放到cdn节点, 由ISP互联网服务提供商进行下发,提升响应速度。
3、 垂直拆分#
Q: 业务逻辑全部耦合在一个服务中有什么缺点?#
A:某个无关紧要的业务,可能因为请求量突然过大,导致影响了所有业务的使用 。 例如ths的cs里同时包含了用户埋点数据采集转发的业务逻辑, 如果这块流量突然过大, 可能导致正常行情数据都无法使用。
大型电商的拆分逻辑举例#
首页、用户、搜索、广告、购物、订单、商品、收益结算
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做过多的安全修复和改造,通过网关保证外部输入安全。