您好,欢迎访问三七文档
分布式高端架构系列Leader-us@MycatZerocICE——微服务架构之王一:微服务架构概述1:什么是单体应用SpringFrameworkRestServiceRestServiceRestServiceRestService浏览器主要业务逻辑都运行在一个进程里的程序1:什么是单体应用SpringFrameworkRestServiceRestServiceRestServiceRestService浏览器主要业务逻辑都运行在一个进程里的程序2:单体应用的七宗罪No1:先天性缺陷No2:系统性风险No3:运维风险No4:难以可持续发展3:微服务架构ServiceServiceServiceServiceServiceServiceServiceServiceService每个微服务实例一个进程LoadBalancerClient4:Ice微服务架构JVMProcessJVMProcessIceNodeLocatorServiceMasterRegistrySlaveRegistryLocatorService服务注册和管理运维工具命令行&Applet微服务描述及部署文件Client服务查询服务调用客户端负载均衡机制ServiceAIceboxServiceAIcebox4:Ice微服务架构特点集群资源池NodeNodeNodeNodeNodeNodeNodeNodeNodeNodeNodeNodeNodeNodeNodeNodeNodeNode运行期任意调整分布式部署架构5:微服务架构的优点No1:先天分布式No2:无状态(尽量)No3:积木式发展二:ZerocIce安装1:安装ICESDK环境官方:,区分平台,安装包比较大,是因为各个版本的库文件都包括了命令行工具,如slice2javaIcegridnode,icegridadminIce.jar,icebox.jar等文件2:安装IcedemosIce-3.6.1-demos部分包括各个语言的例子,建议安装的时候选择安装例子丰富3:安装EclipseIce插件插件用于自动完成slice接口定义到java接口包的源码生成插件地址:Ice插件设置IceBuilder插件需要设置IceSDK的路径,eclipse-preferences菜单里进行设置错误路径三:ZerocIce入门1:服务定义&Slicemoduledemo{interfaceMyService{stringhellow();};};2:ICE通信原理3:基本概念//传入远程服务单元的名称、网络协议、IP以及端口,构造一个Proxy对象Ice.ObjectPrxbase=ic.stringToProxy(MyService:default-p20000);//通过checkedCast向下转型,获取MyService接口的远程MyServicePrxprxy=MyServicePrxHelper.uncheckedCast(base);//调用服务方法Stringrt=prxy.hellow();Ice.ObjectAdapteradapter=ic.createObjectAdapterWithEndpoints(MyServiceAdapter,default-p20000);//实例化一个MyService服务对象(Servant)MyServiceImplservant=newMyServiceImpl();//将Servant增加到ObjectAdapter中,并将Servant关联到ID为MyService的IceObjectadapter.add(servant,Ice.Util.stringToIdentity(MyService));//激活ObjectAdapteradapter.activate();AnIceobjectisanabstraction.IceobjectsdonotphysicallyTheconceptofanIceobjectismaderealbyaservant4:HelloWorld(1)ClientMyServiceNetworkstringhellow()4:HelloWorld(2)14:HelloWorld(3)模块名映射为Java包名[[java:package:com.my]]moduledemo{interfaceMyService{stringhellow();};};myservice.ice服务接口MyService服务接口定义4:HelloWorld(4)14:HelloWorld(5)MyService服务端开发packagecom.my.demo;importIce.Current;publicclassMyServiceImplextends_MyServiceDisp{@OverridepublicStringhellow(Current__current){//TODOAuto-generatedmethodstubreturnnull;}}1@OverridepublicStringhellow(Current__current){returnHelloworld;}4:HelloWorld(6)ServerStarter程序publicstaticvoidmain(String[]args){intstatus=0;Ice.Communicatoric=null;try{//初始化Communicator对象,args可以传一些初始化参数,如连接超时,初始化客户端连接池的数量等ic=Ice.Util.initialize(args);//创建名为MyServiceAdapter的ObjectAdapter,使用缺省的通信协议(TCP/IP端口为20000的请求)Ice.ObjectAdapteradapter=ic.createObjectAdapterWithEndpoints(MyServiceAdapter,default-p20000);//实例化一个MyService服务对象(Servant)MyServiceImplservant=newMyServiceImpl();//将Servant增加到ObjectAdapter中,并将Servant关联到ID为MyService的IceObjectadapter.add(servant,Ice.Util.stringToIdentity(MyService));//激活ObjectAdapteradapter.activate();//让服务在退出之前,一直持续对请求的监听System.out.print(serverstarted);ic.waitForShutdown();}catch(Exceptione){e.printStackTrace();status=1;}finally{if(ic!=null){ic.destroy();}}System.exit(status);}4:HelloWorld(7)Client程序publicstaticvoidmain(String[]args){intstatus=0;Ice.Communicatoric=null;try{//初始化通信器ic=Ice.Util.initialize(args);//传入远程服务单元的名称、网络协议、IP以及端口,构造一个Proxy对象Ice.ObjectPrxbase=ic.stringToProxy(MyService:default-p20000);//通过checkedCast向下转型,获取MyService接口的远程,并同时检测根据传入的名称获取服务单元是否OnlineBook的代理接口,如果不是则返回null对象MyServicePrxprxy=MyServicePrxHelper.uncheckedCast(base);if(prxy==null){thrownewError(Invalidproxy);}//调用服务方法Stringrt=prxy.hellow();System.out.print(rt);}catch(Exceptione){e.printStackTrace();status=1;}finally{if(ic!=null){ic.destroy();}}System.exit(status);}4:HelloWorld(8)完工测试一:启动Server二:启动Client5:RPC性能之王Rpc并发客户端每客户端调用次数总调用次数执行时间每秒调用数tpsice130000030000016s18329dubbo130000030000052s5675thrift130000030000023s12832grpc130000030000077s3896Rpc并发客户端每客户端调用次数总调用次数执行时间每秒调用数tpsice10030000030000000361s83014dubbo100300000300000001599s18760thrift10030000030000000597s50211grpc100300000300000002186s13721从数据可以看出ice,thrift的tps最高,ice是thrift的1.6倍,是dubbo的4.4倍,是grpc的6倍,来自南哥测试报告,6:ICERPC总结很简洁,只依赖一个包多语言支持高性能,很稳定二:ICE微服务架构实践1:IceBox(1)publicabstractinterfaceIceBox.Service{publicabstractvoidstart(java.lang.Stringarg0,Ice.Communicatorarg1,String[]arg2);publicabstractvoidstop();}IceBoxServiceServiceServiceServiceServiceServiceServletjavaIceBox.Server--Ice.Config=config.icebox1:IceBox(2)开发运行在IceBox中的Service依赖包1:IceBox(3)开发运行在IceBox中的Servicepackagecom.my.demo;importIce.Communicator;importIceBox.Service;publicclassMyHelloBoxServiceimplementsService{@Overridepublicvoidstart(Stringarg0,Communicatorarg1,String[]arg2){//TODOAuto-generatedmethodstub}@Overridepublicvoidstop(){//TODOAuto-generatedmethodstub}}1:IceBox(4)编写IceBox的配置文件#serverpropertiesIceBox.InheritProperties=1IceBox.PrintServicesReady=MyAppIceBox1#servicedefinebeginIceBox.Service.MyService=com.my.demo.MyHelloBoxServiceprop1=1prop2=2prop3=3MyService.Endpoints=tcp-p20000-hlocalhost#performancepropertiesIce.ThreadPool.Server.Size=4Ice.ThreadPool.Server.SizeMax=100Ice.ThreadPool.Server.SizeWarn=40Ice.ThreadPool.Client.Size=4
本文标题:Ice微服务架构
链接地址:https://www.777doc.com/doc-4755965 .html