下一篇:微服务架构演变过程(下) | 带你读《Spring Cloud Alibaba(2019)》之二
本文来自于《精通Spring Cloud Alibaba》课程的整理,讲师为余胜军,点击查看视频内容。
本文系志愿者整理,供配合学习中心课程使用,不做商业用途。
Spring Cloud Alibaba课程说明
该课程主要讲解Spring Cloud Alibaba核心组件 Nacos(服务注册与发现和分布式配置中心)、Sentinel(服务保护框架)、Seata(分布式事务解决框架)、阿里云OSS、Alibaba Cloud SchedulerX等。
注意事项:该课程需要有一定的SpringBoot基础知识,如果对SpringBoot不了解的话、可以在蚂蚁课堂中学习SpringBoot基础内容。
微服务架构演变过程
传统单体架构——分布式架构——SOA面向服务架构——微服务架构模式
传统架构
传统的架构,也就是为单点应用,也就是大家在早期所学习的JavaEE知识SSH或者SSM架构模式,会采用分层架构模式:数据库访问层、业务逻辑层、控制层,从前端到后台所有的代码都是一个开发者去完成。
该架构模式没有对我们业务逻辑代码实现拆分,所有的代码都写入到同一个工程中里面,适合于小公司开发团队或者个人开发。
com.mayikt.controler---springmvc 视图层 jsp/ftl
com.mayikt.service---业务逻辑层
com.mayikt.dao---数据库访问层
将项目的代码都放入到同一个项目,部署在同一个Tomat中。
该架构模式存在哪些优、缺点:
优点:开发简单、运维简单
缺点:该架构模式没有对我们的业务逻辑实现拆分,所有的代码都写入到同一个项目中,
只适合小团队或者个人形式开发,不适合团队模式协同工作开发
这种架构模式最大的缺点,如果该系统一个模块出现不可用、会导致整个系统无法使用。
应用场景:*项目、管理系统、crm、oa适合于个人小团队开发。
分布式架构
分布式架构模式是基于传统的架构模式演变过来,将传统的单点项目根据业务模块实现拆分、会拆分为会员系统、订单系统、支付系统、秒杀系统等。 从而降低我们项目的耦合度,这种架构模式开始慢慢的适合于互联网公司开发团队。
如果项目团队人数较多需要进行项目拆分。需要把单体项目不同的系统。大型公司和大型开发团队多用这种团队开发的模式。
不同的系统如何连成一块呢?需要通过域名跳转。
会员系统:memner.mayikt.com
支付系统pay.mayikt.com
命名系统化:包含服务和视图层
SOA面向服务架构
不同系统间的会话是如何进行绑定的呢?需要用到SSO单点登入系统。
SOA架构模式也称作为:面向服务架构模式、俗称面向与接口开发,将共同存在的业务逻辑抽取成一个共同的服务,提供给其他的服务接口实现调用、服务与服务之间通讯采用rpc远程调用技术。
通过SSO系统能解决代码冗余的问题。
服务:只是有接口 没有控制层 没有视图层
com.mayikt.service
com.mayikt.dao
这种模式叫作SOA面向业务逻辑的开发。
SOA架构模式特点:
1、SOA架构通讯中,采用XML方式实现通讯、在高并发下通讯过程中协议存在非常大冗余性,所以在最后微服务架构模式中使用JSON格式替代了XML。
2、SOA架构模式实现方案为Web Service或者是ESB企业服务总线 底层通讯协议SOAP协议(Http+XML)实现传输。
传统*、银行项目还是保留的在使用Web Service
互联网公司肯定采用http+json形式实现运输
ESB企业服务总线
解决多系统之间跨语言通讯,数据协议的转换,提供可靠消息传输。
基于IDEA快速构建Web Service
Web Service服务器端
public class UserService {
@WebMethod
public String getUser(Long id) {
return "mayikt用户:" + id
;
}
public static void main(String[] args) {
Endpoint.publish("http://192.168.18.218:8089/service/UserService", new UserService());
System.out.println("服务发布成功");
}
http://192.168.18.218:8089/service/UserService?wsdl 获取wsdl
wsdl文件描述接口的调用地址 服务的接口 方法 参数等。
Web Service客户端
public class WebServiceClient {
public static void main(String[] args) throws ServiceException, RemoteException {
UserServiceServiceLocator userServiceServiceLocator = new UserServiceServiceLocator();
UserService userService = userServiceServiceLocator.getUserServicePort();
String result = userService.getUser(10L);
System.out.println("result:" + result);
}
}