Spring framework架构的项目就像上海中心这样的高楼大厦,一栋大厦里租用者各色各样的公司和企业为用户提供各种各样的服务。
大厦里的每间办公室都是一个容器,对应着一个docker容器,空办公室对于用户来说是没有任何意义的,只有里面入住了企业(Spring boot),跑了各种程序,才叫一个微服务结点。
房间号可以理解成容器的ip和端口,企业名理解成微服务的服务名,如果一家企业规模较大,需要租多间办公室才可以,那就是多个容器共同组成一个高可用性的微服务组群。
大厦有一本企业列表,有哪些企业提供哪些服务,对应的房间号是什么,这本列表就是Spring Cloud Eureka。
大厦的大门是所有企业的对外的gateway,用户只能通过大门进去然后进行安检后保安会帮你指路告诉你要找的企业在哪里,这里的大门和门卫就是Spring Cloud Zuul。
也不是所有的房间都是给企业准备的,也有弱点室、茶水间等为所有企业准备的公共设施,这就是Spring Cloud Hystrix的Dashboard、redis、MQ等这些独立的辅助服务。
如果要访问大厦里的某一个企业你只知道企业名,你是不知道具体在哪一楼层哪一房间的,需要去看楼层的导航图或者电梯附近的企业列表(Eureka),如果一个企业有多个房间,客户自己决定进哪一个房间去获取服务,这就是Spring Cloud Ribbon。如果你今天一连几次都没有在某一个企业获得自己想要的服务,你会过段日子再来试试运气(熔断了),或者约几个人一起来拜访(请求聚合和拆解),这就是Spring Cloud Hystrix。如果你是有头有脸的重要人物,以上访问一个企业的流程不够上档次,大厦会安排专门的礼仪小姐在电梯口迎接,提高客户满意度,这就是Spring Cloud Feign。
如果你一次性进入这个大厦是要拜访不止一个企业,什么时候进入哪个房间什么时候出来,什么时候又进入了其他的房间这些通过摄像头都有记录,而且都给你拍照留念,这个机制就是Spring Cloud Sleuth。
这座大厦的物业公司叫GitHub,所有企业的保洁阿姨等都是Git上给分配的,每个企业每天换什么样的地毯、卫生程度如何都是保洁阿姨决定的,他们是独立于所有企业但是又影响到所有企业的一个组织,这货就叫Spring Cloud Config。当然如果物业公司福利足够好,保洁阿姨住集体公寓,每天上下班都有巴士接送,那就成了Spring Cloud Bus。
恰巧房间号701是生产皮革的企业,而房间703是生产LV包包的企业,俩家签订协议后一开始701的人搞到材料就给703送去,结果总是因为703手上活还没干完而且没多余的空间存放又让701给抱回去,于是两家商量好租下了702这个房间,皮革生产上把生产好的皮革直接送到702房里去,LV企业一旦加工完手上的这批包包就去702房里取新的材料来处理,这里702房就相当于一个Kafka或者RabbitMQ,而701和703之间与702之间的集成就是Spring Cloud Stream。