学习
实践
活动
专区
工具
TVP
写文章

Spring Cloud技术笔记系列-微服务使用背景

最近用了SpringCloud搭建了一个接口平台,一直没抽出时间总结下,计划最近写些文章总结,当然最近也没啥时间,抽空写吧,不定期更新。

今天先写个第0章,也就是为啥要用spring cloud。

背景

首先,为什么要用到springcloud。

先解释下,springcloud只是个技术,咱们用框架不能为了用而用,而是用了来解决什么问题才是最关键的。

那么为什么用呢?

springcloud提供了一整套服务治理相关的东西:

服务注册/发现

断路器

服务网关

服务跟踪

....

等等一系列内容。

所以服务是个重要的概念。

咱们先不提springcloud的事情了,先提服务——

技术进化

单一服务

技术是在不断进步的,之前大家部署情况可能是这样的:

在同一个web服务中,搭建各种各样的服务。不过经过N次开发迭代后,会发现系统越来越臃肿,耦合度越来越高,经常变成上线某个模块把整个服务搞崩了,这就悲剧了。

拆分服务

为了解决这个问题,Martin Fowler等开发大神提出了一个微服务的概念,即把各个模块按照服务进行拆分,独立部署

这样就不会因为某个模块出问题导致其他服务崩溃,减少了服务间的耦合度,各模块通过相应的接口进行通信。

调用时硬编码接口地址:

高可用问题

这样解决了耦合问题,但是又迎来了其他挑战,比如,用户登录很正常,但是数据查询数据量比较大,而且耗时,导致数据查询经常崩溃,怎么办呢?最简单的版本也算是成本最低的办法是——加机器组集群。

数据查询的服务有多个后,调用方式就有些区别了,之前是硬编码,现在多个机器后,怎么处理呢:

Nginx等负载均衡

自己实现负载均衡

当然第一种简单些,通过nginx反代,由Nginx进行负载均衡。

为了保证nginx的高可用,搭建nginx集群。

服务优化

以上似乎解决了80%的问题,但是有几个问题:

服务列表需要手动在nginx维护,例如增加个查询的服务,修改下nginx.conf;去掉个机器,修改下nginx.conf;当一个服务的所有机器全down机后,服务熔断问题等等。

为了解决这个问题,咱们就引入了springcloud的第一个重要组件:Spring Cloud Eureka。

后续会抽出一篇文章介绍Spring Cloud Eureka,这里暂时只阐述下功能,这个组件提供了一个注册中心,提供服务发现等功能,当我们部署架构增加了这个后:

注册中心中心服务维护服务与机器之间的关系,调用端连接注册中心后,当调用某个服务时,只需要知道服务id,注册中心会返回对应的机器信息,调用端直接进行服务调用就可以了,不关心服务的具体机器信息。

服务之间由于连接了同一个注册中心,互相调用也可以只知道服务id即可。

这里需要注册中心定时进行服务列表的更新操作,子服务也需要定期上报自己的状态,以便服务器down机后,请求不在进行转发。服务恢复后,请求自动恢复。

总结

第一章大概就写这么多吧,就是简单的提供了一个模糊的概念,为什么要引入微服务,以及引入微服务后优化点,跟大家分享下

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180604G11X8G00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券