微服务部署测试简单实践

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"微服务特别适合业务复杂,开发队伍庞大的项目。微服务可以到达化整为零,简化单个服务,降低沟通成本的效果。但微服务在性能上比单体服务低,也会有数据冗余的问题,要结合自身情况,不要盲目崇拜。 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本文介绍一种简单的微服务技术架构。帮助大家对微服务如何部署,如何开发有个初步的认识。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"一个简单的微服务架构"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"部署图如下"}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/7c/7c25bd6fff21dd3f3d6bf6cff4c4842e.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"nginx:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"对外统一入口,根据url将请求分发到不同微服务,用ip:port区分不同的微服务。也会直接处理一些静态资源的访问,本身就是web服务器。 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"springboot+dubbo:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"spring boot是目前最流行的开发web服务的框架(jsp,ejb,ssh这些框架过于老旧),它和微服务没有必然联系,但它结合dubbo可以开发微服务,要求就是spring boot工程要import dubbo.jar或者使用maven引入dubbo。配置dubbo-application.xml,里面写好zookeeper服务地址端口以及提供者和消费者要注册的接口方法。 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一个微服务要调用另一个微服务的方法,只需要\\@Autowired注册接口类的对象,用对象调用方法即可。麻烦点的是各个微服务对同一个接口方法要有一致的接口描述java文件,使用maven管理描述接口的jar包可以有效解决接口一致的问题。 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最后打jar包,java -jar \\"},{"type":"text","marks":[{"type":"italic"}],"text":"\\"},{"type":"text","text":"\\*.jar一个微服务就启动了。 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"zookeeper:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"springboot需要dubbo,而dubbo最推荐的服务注册中心是zookeeper,相当于一个公告板,各个微服务都可以看到上面注册的提供者和消费者的接口方法 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"DB:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"MySQL Oracle等 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"redis:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"缓存session数据,和其它有必要缓存的业务数据 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"tomcat+dubbo-admin:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"dubbo管理系统,用于监控和排查故障,部署在tomcat下,可以在浏览器上查看各个微服务的运行情况,查看某个方法是否可以被正常调用。 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"积分查询业务场景,帮助理解微服务。 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"B服务提供检查登陆状态功能。A服务提供查询账号积分功能。 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"当用户在app点击查询积分时,nginx看见url里有查询积分关键字,会根据nginx.conf的配置将请求发送到A服务,app会有个sessionid发送给A服务,A服务远程调用B服务的检查登陆状态的接口,将sessionid传给接口,B服务接口被调用,使用sessionid到redis查用户信息,如果查询到redis有对应的用户信息,将用户信息返回,A服务接收到远程调用接口返回的用户信息userid,接下来根据用户信息到数据库DB查询积分情况。 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这就是两个微服务配合实现一个业务的例子,用到了架构图中的全部单元。查询登陆状态的要求在各个业务都存在,所以会有很多微服务需要远程调用B服务的接口。同时每个微服务可以即是提供者,又是消费者。 "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/7d/7d632ae25b80d2695c6bc7fd1d745363.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"在windows下配置一套完整的微服务开发环境。 "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"nginx "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"D:\\\\Program Files\\\\nginx-1.8.1>start nginx.exe "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/73/73d05186b046e5fb9f7065c3697c253e.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"成功后浏览器如下 "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/39/39bcc8bd19287052f6359b2f5c669f56.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"MySQL "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"D:\\\\Program Files\\\\mysql-8.0.12-winx64\\\\bin>mysqld --console "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/c3/c30245914a243ffc67a6f852624e83f7.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"redis "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"D:\\\\Program Files\\\\Redis-x64-3.0.504>redis-server.exe redis.windows.conf "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"图我忘截了 "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"zookeeper "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"双击zkServer.cmd "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/be/be0cf85cde959f4e7bdb36f673c4111b.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/15/15c0628b76b9a62b3061c9d225eaa19b.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"tomcat和dubbo-admindubbo-admin "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"需要github上下载,然后单独对dubbo-admin进行编译打war包,war包放到tomcat的webapps目录下,tomcat启动时会自动解压出文件夹,如下图 "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/ab/ab9bf92df86349e9034f0ef52d97f42d.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"tomcat/bin目录执行startup.bat  成功后浏览器如下 "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/fe/fe41738b381f996c1b3dd88e4d70ab17.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"打开 http://127.0.0.1:8080/dubbo-admin-2.5.8/  (我最初打开页面卡死,后来删除tomcat/log里的全部日志后正常了) "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用户名root 密码root "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/f9/f973cd956d8480bd7e97c0528c955168.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/58/58655785b70da7cb3b7b842743b07f36.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"没有启动任何微服务所以上图各项都是空的。在Intellij IDEA运行两个微服务(cmd里java -jar 启动微服务jar包也可以,但调试修改代码不太方便) "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可以看到dubbo管理系统可以看见两个服务,一个是提供者,一个是消费者。里面可以查看名称,状态,日志,对排错挺有帮助的。 "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/c0/c05c98d7d7f7d0465bbd4eb5020b3118.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/73/733b1118c2b997670df0d00489adef19.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/49/4944a7b08781cbc6d0c3ce744810f30a.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"测试dubug"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"浏览器输入登陆的url可以看到打开登录页面。 "}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/55/550ae166918c8c9ffeba27cbe9a490d0.png","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"到此一个微服务系统的开发调试环境就完成了。如果只测试后端服务不关心浏览器和app界面的功能,可以使用postman工具,直接发送url给服务端,查看返回的json数据等是否达到预期要求。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章