您的位置:首页 > 运维架构 > 网站架构

大型网站技术架构(三):关于架构体系的补充

2016-09-30 13:45 621 查看
一、面向服务的体系架构(SOA)

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实现方式

实现方式名称介绍
BIOBlocking IO阻塞,一个Socket套接字需要使用一个线程来进行处理
NIONonblocking IO基于事件驱动思想,采用Reactor模式,在一个线程中处理多个Socket套件字相关的工作
AIOAsynchronousIO异步IO,采用Proactor模式,在进行读写操作时,调用相应的read/write方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: