1. 微服务主要七个模块
- 中央管理平台:生产者、消费者注册,服务发现,服务治理,调用关系
- 生产者
- 消费者
- 权限管理
- 流量管理
- 自定义传输协议
- 序列化反序列化
2. 中央管理平台
生产者A在中央管理平台注册后,中央管理平台会给他生成一个唯一的身份ID。生产者需要引入生产者 jar 包,在合适的位置放入这个身份ID,然后再启动程序。启动之后,这些 jar 包就自动向中央管理平台汇报,生产者就可以知道有多个服务器。
消费者也是同理。
消费者在向生产者申请时,并不会申请生产者的所有接口,而是只申请用到的几个接口。生产者也会知道哪个消费者调用了自己的接口。
消费者首次问中央管理平台后就不再问了,之后就直接请求生产者程序的 jar 包,这样可以减少网络 IO 次数,提高性能。
生产者和消费者的一切信息都可以在中央管理平台查到。
2.1. 如果有生产服务器崩溃
如果有一台生产者服务器崩溃,此时只依靠中央管理平台的话,中央管理平台会在几分钟后才发现出现问题,会很慢很慢。
此时消费者调用服务器发现异常时,会向中央管理平台发送崩溃信息,同时消费者更换其他的服务器,此时中央管理平台向其他的消费者发送崩溃信息,这样的话会很快地解决问题。
2.2. 网络传输最基础的四层协议
.
网络流的本质就是数组。
C中的 char[] 可以算一个字节流也可以算是一个字符流,但是Java中 char[] 可以算是字符流,byte[] 可以算是字节流。
自定义协议:自己定义数组中每一段字符代表的意思,接收时如何解析,等等。
3. 生产者和消费者
生产者 --> Tomcat + SpringBoot
消费者 --> Mybatis
4. 权限管理
每台消费者服务器会把权限缓存到本地,如果有程序想非法访问,那么 jar 包会对其进行拦截。(如果让生产者来判断权限,会加重生产者的压力)
消费者会做负载均衡,确保均匀地访问生产者服务器。
5. 流量管理
如何控制多台服务器请求次数?(3台服务器每分钟请求次数不超过3000次)
限流次数不需要太精确。
- 平均分配;
- 找一台服务器总统计,其他服务器每秒同步一次请求数量。