java搭建微服务架构_使⽤SpringCloud搭建微服务项⽬架构前⾔:
本⽂为使⽤ Spring Cloud 搭建微服务项⽬架构的整体思路讲述,欢迎讨论。⽂章对新⼿不友好,推荐新⼿访问此⽂:史上最简单的SpringCloud 教程 | 终章,讲得很好。
1、微服务的定义
微服务的通俗定义就是⼀个⼩型的项⽬服务,但是写⽂章则需要有明确的定义才⾏。⽂绉绉的描述语⾔⼤概如下:
⼀个能够独⽴运⾏的、可提供完整服务的微型服务。
这⾥⾯是三个条件:独⽴运⾏、可提供完整服务、微型。
独⽴运⾏则意味着跟其他服务完全解耦,如果服务之间存在业务关联,要么把他们并为⼀个微服务,要么通过接⼝进⾏交互。这也意味着,不同微服务之间如果涉及到数据库操作的话,⼀个微服务不可以直接操作属于另⼀个微服务的库表,即使他们的表放在同⼀个库。因为这种⾏为⼀旦发⽣,那么这两个微服务⼜出现了新的耦合维度。
可提供完整服务则意味着其他与之⽆关的微服务即使挂掉,它⾃⼰通过接⼝提供的服务也不受任何影响,除⾮他们之间存在接⼝互动上的关联,那样也只影响到有关联的。
微型则表⽰每个微服务都不会有太多的接⼝,否则就变成了传统的项⽬了。
任何满⾜以上三个条件的服务,我都认为是⼀个微服务了——所以,微服务是⼀个概念,⽽不是⼀种技术。不管使⽤何种技术、何种框架、何种⽅式进⾏搭建。
2、微服务的好处
微服务注册中心有哪些微服务的好处主要有:敏捷开发、选择性扩容等
使⽤微服务架构的项⽬,因为微服务之间完全解耦,所以可实现敏捷开发;同时也可以根据微服务的并发量进⾏选择性扩容或集等。
3、为什么要⽤ Spring Cloud
Spring Cloud 推荐了很多微服务的解决⽅案,使⽤ Spring Cloud 可快速搭建微服务架构,并且背靠 Spring 社区的良好⽣态。
4、使⽤ Spring Cloud 搭建微服务的思路
⾸先需要⼀个注册服务的注册中⼼,可选择zookeeper、eureka。
其他的微服务都在⾃⼰搭建的注册中⼼注册,通过ribbon+resttemplate进⾏通信,这时url不需要使⽤完整的ip+port的⽅式,⽽是使⽤微服务在注册中⼼注册时提供的名称即可。只⽤注册名⽽⾮ip+port的⽅式进⾏通信还有⼀个好处,就是可以实现集:同⼀个微服务部署多份,不管ip和port相差多远,注册中⼼都会调度微服务的集,起到负载均衡的效果。
还有使⽤feign可达到类RPC的接⼝调⽤效果。
微服务提供接⼝给外部访问时,不能像微服务间通信⼀样使⽤注册名通信那么⽅便,还是需要ip+port才能访问到:这样对接⼝使⽤⽅来说时⾮常⿇烦的事。这时可通过配置统⼀⽹关,让使⽤⽅通过⽹关再转发到对应的微服务即可。这样,多个微服务及集的情况,对于调⽤⽅来说都是透明的,⽤户感知就是调⽤了某个接⼝,⽽不是特定的某个微服务。
统⼀⽹关可使⽤zuul来配置。
这样,就基本完成了⼀个微服务的搭建,不使⽤框架的话,搭建微服务需要解决的问题颇多,不建议⾃⼰造轮⼦。