前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【微服务】133:什么是微服务?

【微服务】133:什么是微服务?

作者头像
刘小爱
修改2020-08-28 11:05:33
4120
修改2020-08-28 11:05:33
举报
文章被收录于专栏:零基础自学Java零基础自学Java

学习内容安排如下:

  • 系统架构的演化:集中式架构、分布式架构。
  • 服务之间的调用方式:HTTP和RPC。
  • Spring提供的RestTmeplate模板的使用。

当然系统架构肯定不是说我一篇文章就能学好的,只能说我作为一名初学者,是如何去理解这些概念的。

至于想要真正地去弄懂这些,需要自己长期性地不断学习,非一朝一夕就能学完的。

一、系统架构概述

技术更新是非常快的,从单一应用到垂直细分,到分布式,到SOA,以及微服务架构。

还有在Google带领下的Service Mesh,只有不断地学习才能在IT行业前行下去。

1集中式架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。

但是流量一旦增加就会出现各种的问题:

  • 代码耦合,开发维护困难。
  • 无法针对不同模块进行针对性优化以及扩展。
  • 单点容错率低,并发能力差。

当然为了解决这些问题,后续也做了优化,根据业务功能对系统进行拆分。

虽然解决了代码耦合问题,但是系统间相互独立,会有很多重复开发工作,影响开发效率。

举一个例子来理解,比如说一个电商项目,根据业务功能拆分成两套系统:

  • 前端门户系统:就是用户看到的界面。
  • 后台管理系统:内部人员的管理界面。

那么现在问题来了:

根据id去数据库查询商品,Service层和Dao层的代码要写两遍,造成了代码的极度冗余。

2分布式服务

为了解决代码冗余问题,可以将核心业务作为独立的服务抽取出来,形成服务中心。

多个子系统只需要访问服务中心就好了。

优点:将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率。

缺点:一旦服务变多,调用关系错综复杂,开发者自己都搞不清楚谁调用谁,难以维护。

3流动计算架构SOA

它将普通的分布式系统集中管理起来了,更便于维护,同时也提高资源利用率。

其典型的架构就是Dubbo,这个架构图就比较复杂了,我就不自己画了。

不要看好像挺复杂的,本质上都是为了管理服务,我以打车的例子大致说明下:

  • 在以前,我们若是要乘车,需要去找车,而对于车主来说也需要找乘客。
  • 而现在,有打车服务了,我们若是要乘车直接叫滴滴就好了,而司机也方便找乘客。

对于服务也是一样的,以前有什么问题?

  • 服务越来越多,要管理每个服务的地址。
  • 服务之间调用关系错综复杂,难以理清。
  • 服务过多,服务状态难以管理。

为了解决上述问题,服务治理做了哪些?

  • 服务注册中心,实现服务自动注册,无需人为记录服务地址。
  • 服务自动订阅,服务列表自动推送,服务调用透明化,无需关心依赖关系。
  • 动态监控服务状态,人为控制服务状态即可。

对于我个人来说,我就会用滴滴和司机之间的关系作为对比,来理解服务管理和服务之间的关系,不然专业术语太多了,也很难理解。

4微服务

微服务和SOA比较像,但也有一些差别。

①微:微服务的核心

也就是小的意思,服务拆分粒度很小。例如一个用户管理就可以作为一个服务。

②面向服务

每个服务都要对外暴露Rest风格服务接口API,并不关心服务的技术实现。

你是用Java实现的也好,还是用Python实现的也罢,都可以,只要提供Rest的接口即可。

③单一职责

微服务中每一个服务都对应唯一的业务能力,做到单一职责。

④独立

  • 团队独立:每个服务对应独立的开发团队。
  • 技术独立:因为是面向服务,提供Rest接口,使用什么技术没有别人干涉。
  • 自治:自治是说服务间互相独立,互不干扰。
  • 前后端独立:以前后端要为电脑端、手机端提供不同接口,现在只需要提供Rest接口。
  • 数据库分离:每个服务都使用自己的数据源。
  • 服务独立:服务间虽然有调用,但要做到服务重启不影响其它服务。

二、服务调用方式

我们以前写的代码本质上都是在一个服务中,属于服务内部:类与类之间的调用。

那如何实现服务之间的调用呢?有两种方式:RPC调用和Http调用。

1RPC调用

基于原生TCP通信,速度快,效率高,现在热门的dubbo,都是RPC的典型代表。

2Http调用

这个就太常见了,我们以前一直在用的Ajax请求,就属于http调用。

它的特点在于灵活,实现了不同编程语言之间的调用,Ajax就是在使用js调用Java。

现在使用Java代码调用Java,做个演示:

我在电脑上创建了两个不同的工程,工程①也就是我们这几天用SpringBoot搭建的项目。

在工程①中实现了通过id去数据库查询用户数据的功能,也可以通过浏览器访问。

那在工程②中调用工程①中的业务,也就是服务之间的调用。

注意:这和以前已经有本质上的区别了,以前都是内部的调用,现在不一样了。

当然因为我这边只有一台电脑,所以我不太确定能否实现跨电脑的调用。

那它具体是如何实现的呢?

3RestTemplate

它是Spring提供的一个模板工具类,也是上述我使用到的工具:

①SpringBoot测试

在SpringBoot中测试和在Spring中测试有些许不同之处需要注意。

是使用注解@SpringBootTest说明,参数为启动类的字节码。

②restTemplate

这也就是spring提供的模板工具类,使用spring注入后,即可以直接使用

③getForObject()

这是发送一次get请求,postForObject对应着post请求,发送到哪儿呢?

  • 参数一:指定访问电脑的IP地址。
  • 参数二:返回数据的Class对象。

最后

学习完了Http客户端工具,就可以正式学习微服务了,明天开始学SpringCloud。

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 刘小爱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、系统架构概述
  • 二、服务调用方式
  • 最后
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档