微服务概念越来越火,许多新建系统都尽量按照微服务思想设计架构。本文介绍一种简单,但是经典容易理解的微服务技术架构。可以帮助大家对微服务如何设计,如何部署有个初步的认识。如图
nginx:对外统一入口,根据url将请求分发到不同微服务,用ip:port区分不同的微服务。也会直接处理一些静态资源的访问,本身就是web服务器。
springboot+dubbo:springboot是目前 的开发web服务的框架(jsp,ejb,ssh这些太老旧的技术和框架建议不要花太多时间学习了),它和微服务没有必然联系,但它结合dubbo可以开发微服务,所以springboot工程要importdubbo.jar或者使用maven引入dubbo。还需要额外配置dubbo-application.xml,里面写好zookeeper服务地址端口以及提供者和消费者要注册的接口方法。一个微服务要使用另一个微服务的方法,只需要
Autowired注册接口类的对象,对象调用方法即可。麻烦点的是各个微服务对同一个接口方法要有一致的接口描述java文件,使用maven管理描述接口的jar包可以有效解决接口一致的问题。 打jar包,java-jar***.jar一个微服务就启动了。zookeeper:springboot需要dubbo,而dubbo最推荐的服务注册中心是zookeeper,相当于一个公告板,各个微服务都可以看到上面注册的提供者和消费者的接口方法
DB:MySQLOracle等等
redis:缓存session数据,和其它有必要缓存的业务数据
tomcat+dubbo-admin:dubbo管理系统,用于监控和排查故障,部署在tomcat下,可以在浏览器上查看各个微服务的运行情况,查看某个接口方法是否可以被正常调用。
我没有将dubbo单独列出来是因为开发部署过程中,dubbo就是springboot项目导入的一个包,可以将它和任何springboot项目import的包并列,并不需要特别处理。注册中心,微服务,nginx,数据库,redis的多活灾备问题本文也没有考虑。
下面说个场景,帮助理解微服务。
B服务提供检查登陆状态功能。A服务提供查询账号积分功能。当用户在app点击查询积分时,nginx看见url里有queryJF关键字,会根据nginx.conf的配置将请求发送到A服务,A服务最开始的步骤就是检查用户是否登陆,客户端会有个sessionid(sessionid加密解密本文忽略)发送给A服务,A服务远程调用B服务的检查登陆状态的接口,将sessionid传给接口,B服务接口被调用,使用sessionid到redis查用户信息,如果查询到redis有对应的用户信息,将用户信息返回,A服务接收到远程调用接口返回的用户信息,接下来根据用户信息到数据库DB查询积分情况。这就是一个简单的两个微服务配合实现一个业务的例子,用到了架构图中的全部单元。查询登录状态的要求在各个业务都存在,所以会有很多微服务需要远程调用B服务的接口。同时每个微服务可以即是提供者,又是消费者。
下面演示在windows下配置一套完整的微服务开发环境。
nginxD:\ProgramFiles\nginx-1.8.1startnginx.exe
成功后浏览器如下
MySQLD:\ProgramFiles\mysql-8.0.12-winx64\binmysqld--console
redisD:\ProgramFiles\Redis-x64-3.0.redis-server.exeredis.windows.conf
图我忘截了
zookeeper双击zkServer.cmd
tomcat+dubbo-admin
dubbo-admin需要github上下载,然后单独对dubbo-admin进行编译打war包,war包放到tomcat的webapps目录下,tomcat启动时会自动解压出文件夹,如下图
tomcat/bin目录执行startup.bat成功后浏览器如下
打开
转载请注明:http://www.0431gb208.com/sjslczl/1540.html