服务治理(负载均衡)
服务治理
一、微服务架构与传统单体架构
1、微服务架构与SOA服务化的区别
|
SOA服务 |
微服务 |
目标 |
强调异构服务之间协作和集成 |
拆分模块、快速拓展 |
管理 |
着重中央管理 |
重在分散管理 |
粒度 |
通常粒度粗 |
粒度细,职责单一 |
二、常用微服务架构的设计模式
1、聚合器微服务设计模式
用户对聚合器进行单个调用,然后聚合器调用每个相关的微服务并收集数据,对其应用业务逻辑,并进一步发布作为一个REST端点。
2、代理服务设计模式
也是聚合器设计模式的变形,代理可以仅仅委派请求,也可以进行数据转换工作。
3、链式服务设计模式
这种模式在接收到请求后会产生一个经过合并的响应,如下图所示:
在这种情况下,服务A接收到请求后会与服务B进行通信,类似地,服务B会同服务C进行通信。所有服务都使用同步消息传递。在整个链式调用完成之前,客户端会一直阻塞。因此,服务调用链不宜过长,以免客户端长时间等待。
4、分支服务设计模式
这种模式是聚合器模式的扩展,允许同时调用两个微服务链。
5、数据共享微服务设计模式
适合于单一架构向分布式过渡的阶段,一般是缓存共享,而不是数据库共享。把数据共享给其它服务。
6、异步消息传递微服务设计模式
虽然REST设计模式非常流行,但它是同步的,会造成阻塞。因此部分基于微服务的架构可能会选择使用消息队列代替REST请求/响应,如下图所示:
问题思考:
1、如何解决其中一个服务响应面的问题?
1)如果不是强一致性要求,可以做消息中间件(kafka)
2)如果是强一致性要求,可以考虑扩容,根据业务量把服务增加一些。
3)服务的优化,建立服务的监控体系,看是哪一步慢。查看有没有慢查询。
一、springCloud
1、SpringCloud alibaba
这幅图是 Spring Cloud Alibaba 系列组件,其中包含了阿里开源组件,阿里云商业化组件,以及集成Spring Cloud 组件。
2、快速启动
3、Ribbon
是1个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现,她没有独立部署,但是是cloud微服务的基础设施。微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的。
负载均衡对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。
@LoadBalanced开启客户端的负载均衡。
3、RestTemplate
是一个rest请求模板
4、Feign
使⽤feign之后,我们调⽤eureka 注册的其他服务,在代码中就像各个service之间相互调用那么简单。
将json数据转换为实体
/*
1.最简单的常用方法,直接将一个json转换成实体类
*/
ObjectMapper objectMapper = new ObjectMapper();
String json = "{\"userName\":\"小李飞刀\",\"age\":18,\"addTime\":1591851786568}";
//这里需要这么写,
UserBase userBase = objectMapper.readValue(json, UserBase.class); //简单类型的时候,这样最方便
UserBase userBase1 = objectMapper.readValue(json, new TypeReference<UserBase>() {}); //这样也可以,TypeReference主要针对复杂类型
前端接口调用后台如何做到绝对的安全?
1、加密。
2、中间件,中间件做加密。安全认证!
3、后台拿到请求去访问数据库时,一定要做一个sql的安全验证。
一、如何把单体服务平滑到微服务?
1、把拆的服务列数来和产品对,梳理服务里面有哪些东西,拆的多细,定义好服务的边界值。
2、数据库表的归类。
3、选型,微服务落地。①代码架构是否要调整;② 从边界服务开始;③ 借助公司的公共组件
4、代码合并
考虑服务的扩容机制、运维成本;代码的管理