当前位置: 首页 > 科技观察

微服务,Java当前大热的系统架构

时间:2023-03-16 14:22:11 科技观察

学习内容安排如下:系统架构的演进:集中式架构、分布式架构。服务之间的调用方式:HTTP和RPC。使用Spring提供的RestTmeplate模板。当然,系统架构当然不代表我一篇文章就能学好。它只能说我作为初学者如何理解这些概念。至于真正了解这些,还需要长期不断地学习,不是一蹴而就的。一、系统架构概述技术更新非常快,从单体应用到垂直细分,再到分布式,再到SOA、微服务架构。还有谷歌主导下的ServiceMesh。只有不断学习,才能在IT行业中不断前行。1集中式架构当网站流量很小时,只需一个应用即可将所有功能部署在一起,减少部署节点和成本。但是一旦流量变大,就会出现各种问题:代码耦合,开发维护困难。无法针对不同的模块进行针对性的优化和扩展。单点容错率低,并发能力差。当然,为了解决这些问题,后续也进行了优化,按照业务功能对系统进行了拆分。虽然解决了代码耦合的问题,但是系统之间是相互独立的,会有很多重复的开发工作,影响开发效率。举个例子来理解,比如一个电商项目,按照业务功能拆分成两个系统:前端入口系统:就是用户看到的界面。后台管理系统:内部人员管理界面。那么现在问题来了:根据id查询数据库中的商品,Service层和Dao层的代码都要写两遍,导致代码极其冗余。2分布式服务为了解决代码冗余问题,可以将核心业务抽取出来作为一个独立的服务,形成一个服务中心。多个子系统只需访问服务中心即可。优点:抽取基础服务,系统相互调用,提高代码复用和开发效率。缺点:一旦服务多了,调用关系就复杂了,开发者自己也分不清谁调用谁,维护起来也很困难。3流计算架构SOA将普通的分布式系统集中管理,更易于维护,提高了资源利用率。其典型架构是阿里巴巴的Dubbo。这个架构图比较复杂,就不自己画了。不要看的那么复杂,本质上就是管理服务。我以打车为例,大致说明一下:以前我们要打车,就要找车,对于有车的人来说,还要找乘客。但是现在,有出租车服务。如果我们要打车,可以直接叫滴滴,司机找乘客也方便。服务也是如此。之前是什么问题?服务越来越多,需要管理每个服务的地址。服务之间的调用关系错综复杂,难以梳理。服务太多,服务状态难以管理。为了解决以上问题,服务治理做了哪些工作?服务注册中心实现了服务的自动注册,无需人工记录服务地址。服务自动订阅,服务列表自动推送,服务调用透明,无需关心依赖关系。动态监控服务状态和手动控制服务状态。就我个人而言,我会拿滴滴和司机的关系来做类比,来理解服务管理和服务的关系,不然专业术语太多,很难理解。4微服务微服务类似于SOA,但也有一些区别。①微:微服务的核心就是小,服务拆分的粒度很小。例如,用户管理可以用作服务。②面向服务每个服务都必须对外暴露Rest风格的服务接口API,并不关心服务的技术实现。不管你用Java实现还是用Python实现都无所谓,只要你提供Rest接口即可。③单一职责微服务中的每一个服务都对应一个独特的业务能力来实现单一职责。④Independence团队独立性:每个服务对应一个独立的开发团队。技术独立性:因为是面向服务的,提供了Rest接口,其他人不会干扰所使用的技术。自治性:自治性是指服务之间相互独立,互不干扰。前后端独立:以前后端为电脑端和移动端提供不同的接口,现在只需要提供Rest接口即可。数据库分离:每个服务使用自己的数据源。服务独立性:服务之间虽然有调用,但要保证服务重启不影响其他服务。2、服务调用方式我们之前写的代码本质上是在一个服务里面,属于服务内部:类之间的调用。如何实现服务之间的调用?有两种方式: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请求。地址。参数二:返回数据的Class对象。最后,学习完Http客户端工具,就可以正式学习微服务了,明天开始学习SpringCloud。感谢收看。