最简单的微服务部署测试实践
微服务特别适合业务复杂,开发队伍庞大的项目。微服务可以到达化整为零,简化单个服务,降低沟通成本的效果。但微服务在性能上比单体服务低,也会有数据冗余的问题,要结合自身情况,不要盲目崇拜。
本文介绍一种简单的微服务技术架构。帮助大家对微服务如何部署,如何开发有个初步的认识。
一个简单的微服务架构
部署图如下
nginx:
对外统一入口,根据url将请求分发到不同微服务,用ip:port区分不同的微服务。也会直接处理一些静态资源的访问,本身就是web服务器。
springboot+dubbo:
spring boot是目前最流行的开发web服务的框架(jsp,ejb,ssh这些框架过于老旧),它和微服务没有必然联系,但它结合dubbo可以开发微服务,要求就是spring boot工程要import dubbo.jar或者使用maven引入dubbo。配置dubbo-application.xml,里面写好zookeeper服务地址端口以及提供者和消费者要注册的接口方法。
一个微服务要调用另一个微服务的方法,只需要@Autowired注册接口类的对象,用对象调用方法即可。麻烦点的是各个微服务对同一个接口方法要有一致的接口描述java文件,使用maven管理描述接口的jar包可以有效解决接口一致的问题。
最后打jar包,java -jar ***.jar一个微服务就启动了。
zookeeper:
springboot需要dubbo,而dubbo最推荐的服务注册中心是zookeeper,相当于一个公告板,各个微服务都可以看到上面注册的提供者和消费者的接口方法
DB:
MySQL Oracle等
redis:
缓存session数据,和其它有必要缓存的业务数据
tomcat+dubbo-admin:
dubbo管理系统,用于监控和排查故障,部署在tomcat下,可以在浏览器上查看各个微服务的运行情况,查看某个方法是否可以被正常调用。
积分查询业务场景,帮助理解微服务。
B服务提供检查登陆状态功能。A服务提供查询账号积分功能。
当用户在app点击查询积分时,nginx看见url里有查询积分关键字,会根据nginx.conf的配置将请求发送到A服务,app会有个sessionid发送给A服务,A服务远程调用B服务的检查登陆状态的接口,将sessionid传给接口,B服务接口被调用,使用sessionid到redis查用户信息,如果查询到redis有对应的用户信息,将用户信息返回,A服务接收到远程调用接口返回的用户信息userid,接下来根据用户信息到数据库DB查询积分情况。
这就是两个微服务配合实现一个业务的例子,用到了架构图中的全部单元。查询登陆状态的要求在各个业务都存在,所以会有很多微服务需要远程调用B服务的接口。同时每个微服务可以即是提供者,又是消费者。
在windows下配置一套完整的微服务开发环境。
nginx
D:\Program Files\nginx-1.8.1>start nginx.exe
成功后浏览器如下
MySQL
D:\Program Files\mysql-8.0.12-winx64\bin>mysqld --console
redis
D:\Program Files\Redis-x64-3.0.504>redis-server.exe redis.windows.conf
图我忘截了
zookeeper
双击zkServer.cmd
tomcat和dubbo-admindubbo-admin
需要github上下载,然后单独对dubbo-admin进行编译打war包,war包放到tomcat的webapps目录下,tomcat启动时会自动解压出文件夹,如下图
tomcat/bin目录执行startup.bat 成功后浏览器如下
打开 http://127.0.0.1:8080/dubbo-admin-2.5.8/ (我最初打开页面卡死,后来删除tomcat/log里的全部日志后正常了)
用户名root 密码root
没有启动任何微服务所以上图各项都是空的。在Intellij IDEA运行两个微服务(cmd里java -jar 启动微服务jar包也可以,但调试修改代码不太方便)
可以看到dubbo管理系统可以看见两个服务,一个是提供者,一个是消费者。里面可以查看名称,状态,日志,对排错挺有帮助的。
测试dubug
浏览器输入登陆的url可以看到打开登录页面。
到此一个微服务系统的开发调试环境就完成了。如果只测试后端服务不关心浏览器和app界面的功能,可以使用postman工具,直接发送url给服务端,查看返回的json数据等是否达到预期要求。
本文分享自微信公众号 - MySQL从删库到跑路(cskdpl)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
OnRL: 基于在线强化学习的移动视频传输优化
从 2019年开始,淘系技术部内容社交互动团队和北京邮电大学周安福教授一起着手研究更好的基于机器学习的智能拥塞控制算法。在实验室环境完成原型验证后在淘宝直播的生产环境做实际效果对比,从实际数据来看效果明显。我们将其中的技术要点和数据做了总结,并投稿MobiCom2020,非常幸运地被这家全球最顶级的计算机刊物录用。以下是这篇Paper的中译本。 摘要 机器学习模型,尤其是强化学习(RL),在优化视频流应用方面已显示出巨大的潜力。然而,目前的解决方案局限于“离线学习”模式,即 RL 模型在仿真器/模拟器中进行训练,然后 在真实网络中部署。因此,上述方案不可避免地会遇到’仿真-现实’环境之间的差异(gap),在真实网络中的性能远远不如仿真环境下的性能。 在本文中,我们提出了 OnRL,一个实时移动视频通话的在线 RL 框架。OnRL 将单独的 RL agent 直接部署到每个视频通话系统中。这些系统依据 RL 算法,实时地做出视频比特率决策,并随时间实时演化其 RL agent。OnRL 继而聚合这些 agent,形成一个具有高层次信息的 RL 模型,从而使得每个视频通话都能应 对不确定的...
- 下一篇
都别拦着我,我要删库了
本来想删公司服务器,经同事劝解,改为删本人电脑vmware上的虚拟机。 rm -rf /* 一个流传甚广的命令,删库命令,自毁命令说的都是他,常年霸占Linux最危险命令排行榜第一名。关于它的故事有很多 事故一 ❝ 今天去一公司面试,他们要我写个shell,我在他们的服务器输入rm -rf /*,回车,他们现在不让我走了,我想问问我是不是被录取了? ❞ 事故二 ❝ 某技术讨论群里问:Linux优化命令是什么?答:rm -rf /*问:好的,我试一下,多谢!问:卧槽 我网站打不开了!现在怎么办?答:跑路吧 ❞ 事故三 ❝ 一个新来的妹子想卸载Oracle,执行了 rm -rf $ORACLE_BASE/*可是ORACLE_BASE 这个变量没有赋值。就这样,全删了。。全删了 ❞ 命令真正含义:删除根目录"/"下所有文件和目录,有子目录的递归删除。 删库过程 vmware上装的Red Hat Enterprise Linux Server release 6.6,没安装其它应用。切换到root账号,执行rm -rf /*可以看到满屏的cannot remove报错,由于是个刚装完的系统,都...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8编译安装MySQL8.0.19
- CentOS关闭SELinux安全模块