大型网站技术架构(三):关于架构体系的补充
2016-09-30 13:45
621 查看
一、面向服务的体系架构(SOA)
1、RPC(Remote Process Call)远程过程调用
RPC的实现包括客户端和服务端。
一次RPC调用:客户端发送RPC请求到服务端,服务端根据客户端提供的参数执行请求方法,将执行结果返回给客户端。
2、对象的序列化
对象的序列化:将对象转换为二进制流的过程
对象的反序列化:将二进制流恢复为对象的过程
3、基于TCP协议实现RPC
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/28/4ddd7c68dcca2afc5563e767b71851fa)
SayHelloService接口实现了一个sayHello方法
而SayHelloServiceImpl类实现了SayHelloService接口
服务消费者Consumer类的部分关键代码:
服务提供者Provider类的部分关键代码:
4、基于HTTP协议实现RPC
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/28/69d3fbd6659e69e1ee00825f245c08bd)
服务接口BaseService:
服务实现SayHelloService:
服务消费者ServiceConsumer首先定义了要访问的服务名称,需要访问的数据格式,以及需要传输的参数,拼装好访问的URL,接着HttpClient使用定义好的URL,向服务端发送HTTP GET请求,服务端根据请求的格式做出响应,然后JsonUtil将响应的JSON串反序列化为JsonResult对象,最终将结果通过HttpServletResponse输出。
二、分布式系统
分布式系统是由多个节点组成的系统。节点相互连通,相互之间的操作会有协同。
1、组成计算机的5要素
组成计算机的基本元素包括:输入设备、输出设备、运算器、控制器和存储器
2、网络IO实现方式
1、RPC(Remote Process Call)远程过程调用
RPC的实现包括客户端和服务端。
一次RPC调用:客户端发送RPC请求到服务端,服务端根据客户端提供的参数执行请求方法,将执行结果返回给客户端。
2、对象的序列化
对象的序列化:将对象转换为二进制流的过程
对象的反序列化:将二进制流恢复为对象的过程
3、基于TCP协议实现RPC
SayHelloService接口实现了一个sayHello方法
public interface SayHelloService{ public String sayHello(String helloArg); }
而SayHelloServiceImpl类实现了SayHelloService接口
public class SayHelloServiceImpl implements SayHelloService{ @Override public String sayHello(String helloArg){ if(helloArg.equals("hello")){ return "hello"; }else{ return "bye bye"; } } }
服务消费者Consumer类的部分关键代码:
String interfacename = SayHelloService.class.getName(); Method method = SayHelloService.class.getMethod("sayHello", java.lang.String.class); Object[] arguments = {"hello"}; Socket socket = new Socket("127.0.0.1", 1234); ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream()); output.writeUTF(interfacename); output.writeUTF(method.getName()); output.writeObject(method.getParameterTypes()); output.writeObject(arguments); ObjectInputStream input = new ObjectInputStream(socket.getInputStream()); Object result = input.readObject();
服务提供者Provider类的部分关键代码:
ServerSocket server = new ServerSocket(1234); while(true){ Socket socket = server.accept(); //读取服务信息 ObjectInputStream input = new ObjectInputStream(socket.getInputStream()); String interfacename = input.readUTF(); String methodName = input.readUTF(); Class<?>[] parameterTypes = (Class<?>[])input.readObject(); Object[] arguments = (Object[])input.readObject(); Class serviceinterfaceclass = Class.forName(interfacename); Method method = services.get(interfacename); Method method = serviceinterfaceclass.getMethod(methodName, parameterTypes); Object result = method.invoke(service, arguments); ObjectOutputStream output = new ObjectOutputStream(socket.getOutputStream()); output.writeObject(result); }
4、基于HTTP协议实现RPC
服务接口BaseService:
public interface BaseService(){ public Object execute(Map<String, Object> args); }
服务实现SayHelloService:
public class SayHelloService implements BaseService{ public Object execute(Map<String, Object> args){ String[] helloArg = (String[])args.get("arg1"); if("hello".equals(helloArg[0])){ return "hello"; }else{ return "bye bye"; } } }
服务消费者ServiceConsumer首先定义了要访问的服务名称,需要访问的数据格式,以及需要传输的参数,拼装好访问的URL,接着HttpClient使用定义好的URL,向服务端发送HTTP GET请求,服务端根据请求的格式做出响应,然后JsonUtil将响应的JSON串反序列化为JsonResult对象,最终将结果通过HttpServletResponse输出。
二、分布式系统
分布式系统是由多个节点组成的系统。节点相互连通,相互之间的操作会有协同。
1、组成计算机的5要素
组成计算机的基本元素包括:输入设备、输出设备、运算器、控制器和存储器
2、网络IO实现方式
实现方式 | 名称 | 介绍 |
---|---|---|
BIO | Blocking IO | 阻塞,一个Socket套接字需要使用一个线程来进行处理 |
NIO | Nonblocking IO | 基于事件驱动思想,采用Reactor模式,在一个线程中处理多个Socket套件字相关的工作 |
AIO | AsynchronousIO | 异步IO,采用Proactor模式,在进行读写操作时,调用相应的read/write方法 |
相关文章推荐
- 大型网站技术架构(二):架构体系的技术介绍
- 『netbug2009』SD2.0大会上关于“大型网站架构技术”的讨论(笔记)
- SD2.0大会上关于“大型网站架构技术”的讨论(笔记)
- 『rgb2005』SD2.0大会上关于“大型网站架构技术”的讨论()
- SD2.0大会上关于“大型网站架构技术”的讨论()
- SD2.0大会上关于“大型网站架构技术”的讨论
- 大型网站架构演变和知识体系
- 大型网站架构演变和知识体系
- 【转】大型网站架构演变和知识体系
- 大型网站架构演变和知识体系
- 大型网站架构演变和知识体系 (转)
- 大型网站架构演变和知识体系
- 大型网站架构技术方案集锦
- 大型网站架构演变和知识体系(转载)
- 大型网站架构演变和知识体系(转)
- 大型网站架构演变和知识体系
- 大型网站架构演变和知识体系
- 大型网站架构演变和知识体系(转载)
- 大型网站架构演变和知识体系(转)
- 五一技术关注:说说大型高并发高负载网站的系统架构