单体架构的优点和缺点,微服务架构的优点和缺点
单体架构
- 优点:架构简单,维护成本低
- 缺点:各个模块耦合度太高,当对一个模块进行更新修改时,会影响到其他模块,要一起进行修改。当存在性能瓶颈的时候,需要对整个服务进行扩容,不能有针对性的扩容,如一个程序的主要功能时其中某个服务,要对其增加机器,但因为是单体架构只有一个jar包,所以只能所有功能一起升级,哪怕某些服务所需的性能很低。
微服务架构
- 缺点:架构复杂,维护成本高,会带来很多微服务架构的问题,比如说事务问题、网络问题
- 优点:性能高、服务之间耦合度低,服务可以并行开发,开发周期短
分布式和微服务的区别
分布式:分散部署
- 分布式服务顾名思义服务是分散部署在不同的机器上的,一个服务可能负责几个功能,是一种面向SOA架构的,服务之间也是通过来交RPC互或。逻辑架构设计完后就该做物理架构设计,系统应用部署在超过一台服务器或虚拟机上,且各分开部署的部分彼此通过各种通讯协议交互信息,就可算作分布式部署,生产环境下的微服务肯定是分布式部署的,分布式部署的应用不一定是微服务架构的,比如集群部署,它是把相同应用复制到不同服务器上,但是逻辑功能上还是单体应用。
微服务:分散能力
- 在做架构设计的时候,先做逻辑架构,再做物理架构,当你拿到需求后,估算过最大用户量和并发量后,计算单个应用服务器能否满足需求,如果用户量只有几百人的小应用,单体应用就能搞定,即所有应用部署在一个应用服务器里,如果是很大用户量,且某些功能会被频繁访问,或者某些功能计算量很大,建议将应用拆解为多个子系统,各自负责各自功能,这就是微服务架构。
微服务相比分布式服务来说,它的粒度更小,服务之间耦合度更低,由于每个微服务都由独立的小团队负责,因此它敏捷性更高,分布式服务最后都会向微服务架构演化,这是一种趋势, 不过服务微服务化后带来的挑战也是显而易见的,例如服务粒度小,数量大,后期运维将会很难
微服务之间通讯的几种方式?有哪些优缺点?
RPC:远程调用(doubbo协议)
- 优点:相较于http调用,性能更高,RPC基于thrift实现高效的二进制传输,Http大部分通过json实现,字节大小和序列化耗时都比thrift更消耗性能。还有http协议太重了,它有请求头、请求体…
- 缺点:架构复杂,需要引入注册中心。每个服务启动的时候都要将自己暴露的远程调用接口告诉注册中心。
MQ消息队列
- 优点:解耦、异步、削峰
- 缺点:分布式问题显得尤为突出。因为相比于同步调用方式,如果被调用服务报错了,调用方感知不到
微服务网关的几个重要的作用,网关和nginx的区别?
- 统一鉴权,熔点限流,整个微服务后端所有的流量入口
- nginx支持的并发量比网关要多很多。nginx能够保证到达网关的流量都是有用的流量
网关和zookeeper区别?
网关主要是负责微服务http接口的负载均衡(更侧重于客户端和后端之间的通信),而zookeeper主要负责远程调用的负载均衡(后端微服务之间的通信)
nginx几种常见的负载均衡策略。
- 根据权重负载均衡:在轮询策略的基础上指定轮询的几率
- 根据ip负载均衡:指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。
- 轮询:每个请求会按时间顺序逐一分配到不同的后端服务器。
- 随机:就是随机分配