前言
之前了解服务端测试的时候,大概简单介绍过微服务,提到了它们之间通过轻量级"通信机制"相互协作,实现整个应用程序的功能。微服务之间会通过什么通信机制,以及怎样的交互形式进行的呢?下面我们来浅谈一下微服务之间的通信机制以及底层通信原理Socket的实现吧。
微服务概念
微服务是一种软件架构风格,将大型复杂的应用程序拆分成一系列小型、独立的服务,每个服务都可以独立部署、运行和维护。每个微服务都有自己的数据库、业务逻辑和接口,它们之间通过轻量级"通信机制"相互协作,实现整个应用程序的功能。通过微服务架构,可以提高应用程序的可伸缩性、灵活性、可维护性和可测试性,同时降低开发和部署的复杂度。
常见通信的机制
HTTP/HTTPS 形式
使用 HTTP 协议进行通信是微服务架构中最常见的方式。服务之间可以通过 HTTP 请求和响应进行通信。这种方式简单、通用且易于实现,可以使用 RESTful API 或 GraphQL 等方式进行交互。
RPC 形式
RPC 是一种允许程序调用位于不同地址空间(通常是在不同的机器上)的过程或函数的技术。其核心思想是让远程调用看起来就像本地调用一样。RPC 通常是基于底层的网络通信协议来实现的,它隐藏了网络通信的细节,使得开发人员可以专注于业务逻辑。
WebSocket形式
Websocket 是一种在单个 TCP 连接上进行全双工通信的协议。这意味着客户端和服务器都可以在任何时候主动发送数据,而不需要像 HTTP 那样等待请求 - 响应。主要用于实时通信的 Web 应用,如在线聊天、实时数据推送(股票行情、体育赛事比分更新)、在线协作(如多人文档编辑同步)、实时游戏等场景。
底层通信原理-Socket
上述提及常见的通信机制都是基于底层通信原理Socket来实现的。Socket简单理解为用户层与传输层(TCP、UDP)之间的接口。我们可以把 Socket 想象成是应用程序在网络世界中的一个 “插座”,通过这个 “插座”,应用程序能够接入网络并与其他应用程序进行通信。
接下来,我们可以通过pyhton来简单实现Socket通信。
-
服务端–建立连接
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_address = ('127.0.0.1', 9991) server_socket.bind(server_address) server_socket.listen(1)
-
服务端-接收消息
client_socket, client_address = server_socket.accept()res_data = client_socket.recv(1024).decode('utf-8')
-
服务端–返回消息
client_socket.sendall(json.dumps(server_msg).encode('utf-8'))
-
客户端–建立连接
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sever_address = ('127.0.0.1', 9991) client_socket.connect(sever_address)
-
客户端–发送消息
client_socket.sendall(json.dumps(send_data).encode('utf-8'))
-
客户端–接收消息
res = client_socket.recv(1024).decode('utf-8')
-
关闭连接
client_socket.close()
评论区