Spring Cloud 中怎么搭建微服务项目架构,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
微服务的通俗定义就是一个小型的项目服务,但是写文章则需要有明确的定义才行。文绉绉的描述语言大概如下:
一个能够独立运行的、可提供完整服务的微型服务。
这里面是三个条件:独立运行、可提供完整服务、微型。
独立运行则意味着跟其他服务完全解耦,如果服务之间存在业务关联,要么把他们合并为一个微服务,要么通过接口进行交互。这也意味着,不同微服务之间如果涉及到数据库操作的话,一个微服务不可以直接操作属于另一个微服务的库表,即使他们的表放在同一个库。因为这种行为一旦发生,那么这两个微服务又出现了新的耦合维度。
可提供完整服务则意味着其他与之无关的微服务即使挂掉,它自己通过接口提供的服务也不受任何影响,除非他们之间存在接口互动上的关联,那样也只影响到有关联的部分。
微型则表示每个微服务都不会有太多的接口,否则就变成了传统的项目了。
任何满足以上三个条件的服务,我都认为是一个微服务了——所以,微服务是一个概念,而不是一种技术。不管使用何种技术、何种框架、何种方式进行搭建。
微服务的好处主要有:敏捷开发、选择性扩容等
使用微服务架构的项目,因为微服务之间完全解耦,所以可实现敏捷开发——即某个微服务fix了某些BUG或者升级了版本,只需要重新部署升级即可,不需要像传统的项目一样,fix一个小BUG都要将整个服务重新部署升级;服务间的解耦,非常方便敏捷开发、升级等。
同时也可以根据微服务的并发量进行选择性扩容或集群等,比如某个并发量极高的微服务,可以单独部署项目、数据库(上文提到微服务不能操作属于其他微服务的数据,即使是查询也不允许。这样,当某个微服务需要独立部署时,就不存在任何耦合带来的问题,否则就会导致其他微服务直接操作本微服务数据库因为迁移而失效的问题)等。
Spring Cloud 推荐了很多微服务的解决方案,使用 Spring Cloud 可快速搭建微服务架构,并且背靠 Spring 社区的良好生态。
首先需要一个注册服务的注册中心,可选择 zookeeper、eureka。
其他的微服务都在自己搭建的注册中心注册,通过 resttemplate+ribbon 进行通信,这时url不需要使用完整的 ip+port 的方式,而是使用微服务在注册中心注册时提供的名称即可。只用注册名而非 ip+port 的方式进行通信还有一个好处,就是可以实现集群:同一个微服务部署多份,不管 ip 和 port 是什么,ribbon 都会调度微服务的集群,起到负载均衡的效果。
还有使用 feign 可达到类RPC的接口调用效果,feign 本身已经使用了 ribbon。
微服务提供接口给外部访问时,不能像微服务间通信一样使用注册名通信那么方便,还是需要 ip+port 才能访问到:这样对接口使用方来说是非常麻烦的,毕竟微服务的数量可能会非常多,外部调用方就要记住各个微服务的端口号等,而且这样就不能让集群生效了。这时可通过配置统一网关,让使用方通过网关再转发到对应的微服务即可。这样,多个微服务及集群的情况,对于调用方来说都是透明的,用户的感知就是调用了服务的某个接口,而不是特定的某个微服务下的接口。
看完上述内容,你们掌握Spring Cloud 中怎么搭建微服务项目架构的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。