这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战
一、 什么是微服务
微服务架构风格是一种将单个应用程序划分为一组小的服务的方法,每个小的服务都在自己的进程中运行,并且使用轻量级机制通信。这些小服务都是围绕业务功能构建的,可通过完全自动化的部署机制独立部署。这些服务有最低限度的集中管理,它们可以用不同的编程语言编写并使用不同的数据存储技术。
二、单体应用缺点
(1)牵一发而动全身。当对应用程序的一小部分进行更改时,需要重新构建和部署整个应用到云。
(2)积少成多。随着时间的推移,业务功能不断增加,应用程序会越来越臃肿,难以修改和维护。
(3)扩展性差。扩展需要扩展整个应用程序,而不是扩展需要更多资源的部分。
三、微服务优点
1. 服务拆分粒度更细
微服务可以说更细维度的服务化,小到一个子模块,只要该模块依赖的资源与其它模块都没有关系,那么就可以拆分为一个微服务。
2. 服务独立部署
每个微服务都严格遵循独立打包部署的准则,互不影响。比如一台物理机上可以部署多个docker实例,每个docker实例可以部署一个微服务代码。
3. 服务独立维护
每个微服务都可以交由一个小团队甚至个人来开发、测试、发布和运维,并对整个生命周期负责。
4. 服务治理能力要求高
因为拆分为微服务之后,服务的数量变多,因此需要有统一的服务治理平台,来对各个服务进行管理。
四、微服务存在的四大问题
1. 客户端如何访问这些服务?
API网关
2. 服务之间如何通信?
RPC、HTTP和消息队列
3. 如何管理这些服务?
服务注册与发现(注册中心
、[配置中心])
4. 服务挂了,怎么解决?
重试机制、限流、熔断机制、负载均衡、降级(本地缓存)
五、如何解决微服务带来的问题
带着问题学技术
API网关、RPC、HTTP和消息队列、服务注册与发现、重试机制、限流、熔断机制、负载均衡、降级等等
四大注册中心
Eureka(Netflix)
Zookeeper(Apache)
Consul
Nacos(Alibaba)
配置中心
Disconf(百度)
Spring Cloud Config (Spring Cloud 生态)
Apollo(携程)
Nacos(alibaba)
服务通信
openFeign(spring cloud生态)
Feign(netflix)
RestTemplate(spring)
dubbo(apache)
路由网关
Nginx
Zuul(Netflix)
spring-cloud-gateway
负载均衡
客户端负载均衡(Ribbon)
服务端负载均衡(硬件:F5、Array 软件:LVS、Nginx)
断路器
Hystrix(Netflix)