如何在Python中使用ZeroMQ和Docker构建微服务架构
答案:1 悬赏:20 手机版
解决时间 2021-03-01 02:47
- 提问者网友:美人性情
- 2021-02-28 20:16
如何在Python中使用ZeroMQ和Docker构建微服务架构
最佳答案
- 五星知识达人网友:神的生死簿
- 2021-02-28 21:38
微服务是什么?
微服务是一种架构风格,它包括多个彼此间进行通信的独立进程。在设计上,这些进程具有高度的可扩展性、相互解耦而且一次只完成一个较小的任务。这些服务都拥有自己的资源以及通过网络实现彼此间通信的进程。
相比于靠后端的 单体结构
来封装所有服务器逻辑的传统客户端-服务器架构(C/S架构)而言,微服务架构的差异性体现在关注点分离(Separation of
concern)。这种设计模式更易于维护,使得灵活性、可扩展性及容错能力更强。但是这种分布式架构所的不足之处体现在如果设计不合理就会使得排错及维
护变得复杂。
一个简单微服务的例子
让我们来分析这样的一个场景:你正在使用微服务模式构建一个电子商务网店。
对于一个电商网店上的常见商品,好比说iPhone,其详情页会显示:
。产品的及基本信息
。你的购买历史
。哪些人买了iPhone也买了手机套
。与苹果手机相关的优惠和折扣
。店家的数据
。送货方式
。推荐商品等等
此外,这个简单的产品详情页的接口将有多个版本的来匹配web、移动端以及用于第三方应用程序的REST API。
在微服务模式中数据分布在多个服务之间。在这个例子中,服务包括:
。产品详情服务
。商家服务
。支付服务
。优惠及折扣服务
。库存服务
。定价服务
。回顾服务
。推荐服务
这些独立的服务是如何被访问的呢?
解决办法是使用一个API网管,它作为所有客户端的单一入口并且根据需求调用分布在整个基础架构中的特定微服务。以上模式的行业应用案例是NetFlix API网关,它具有支持不同设备的多个API客户端。你可以点击此处 了解更多 。
构建一个简单的微服务
目前有很多方法可以用于构建你的微服务。
在本文中我们将使用ZeroMQ来创建两个进程之间的通信。ZeroMQ提供了用于在套接字之上开发可扩展、分布式systed的构建块。它使用椭圆曲线密码体制(第四版)来实现安全性,并提供了即刻开启的 通讯模式 。
关于ZMQ,还有很多 优点 。MQ即是针对异步工作而设计的线程化消息队列。谈论太多zeroMQ的内容已经超出了本文的范畴,你可以阅读 使用zeromq 以及 zeromq用于分布式系统 。
我们要使用的另一个工具是 Docker 。本文假设读者对Docker已经有了基础的了解。
ZeroMQ有很多种通讯模式,为了开始我们的工作,让我们用ZeroMQ和Flask来配置一个简单的PUB-SUB。下图展示了组件之间的关系和数据流。
1&3 - 一个flask服务器运行在5000端口上而且其URL是 /downcase/ 。该URL用来接受(GET)请求,而所有格式为的请求将收到回应:答谢字符将会转换为小写字符并返回。
2 - 回应的消息也被发送给同一个容器中的ZMQ发布者(Publisher)
4,5 - ZMQ订阅者(subscriber)持续监听并将来自ZMQ服务器的消息保存到名为 subscriber.log 的文件中
创建服务器
首先看一下我们的Dockerfile
微服务是一种架构风格,它包括多个彼此间进行通信的独立进程。在设计上,这些进程具有高度的可扩展性、相互解耦而且一次只完成一个较小的任务。这些服务都拥有自己的资源以及通过网络实现彼此间通信的进程。
相比于靠后端的 单体结构
来封装所有服务器逻辑的传统客户端-服务器架构(C/S架构)而言,微服务架构的差异性体现在关注点分离(Separation of
concern)。这种设计模式更易于维护,使得灵活性、可扩展性及容错能力更强。但是这种分布式架构所的不足之处体现在如果设计不合理就会使得排错及维
护变得复杂。
一个简单微服务的例子
让我们来分析这样的一个场景:你正在使用微服务模式构建一个电子商务网店。
对于一个电商网店上的常见商品,好比说iPhone,其详情页会显示:
。产品的及基本信息
。你的购买历史
。哪些人买了iPhone也买了手机套
。与苹果手机相关的优惠和折扣
。店家的数据
。送货方式
。推荐商品等等
此外,这个简单的产品详情页的接口将有多个版本的来匹配web、移动端以及用于第三方应用程序的REST API。
在微服务模式中数据分布在多个服务之间。在这个例子中,服务包括:
。产品详情服务
。商家服务
。支付服务
。优惠及折扣服务
。库存服务
。定价服务
。回顾服务
。推荐服务
这些独立的服务是如何被访问的呢?
解决办法是使用一个API网管,它作为所有客户端的单一入口并且根据需求调用分布在整个基础架构中的特定微服务。以上模式的行业应用案例是NetFlix API网关,它具有支持不同设备的多个API客户端。你可以点击此处 了解更多 。
构建一个简单的微服务
目前有很多方法可以用于构建你的微服务。
在本文中我们将使用ZeroMQ来创建两个进程之间的通信。ZeroMQ提供了用于在套接字之上开发可扩展、分布式systed的构建块。它使用椭圆曲线密码体制(第四版)来实现安全性,并提供了即刻开启的 通讯模式 。
关于ZMQ,还有很多 优点 。MQ即是针对异步工作而设计的线程化消息队列。谈论太多zeroMQ的内容已经超出了本文的范畴,你可以阅读 使用zeromq 以及 zeromq用于分布式系统 。
我们要使用的另一个工具是 Docker 。本文假设读者对Docker已经有了基础的了解。
ZeroMQ有很多种通讯模式,为了开始我们的工作,让我们用ZeroMQ和Flask来配置一个简单的PUB-SUB。下图展示了组件之间的关系和数据流。
1&3 - 一个flask服务器运行在5000端口上而且其URL是 /downcase/ 。该URL用来接受(GET)请求,而所有格式为的请求将收到回应:答谢字符将会转换为小写字符并返回。
2 - 回应的消息也被发送给同一个容器中的ZMQ发布者(Publisher)
4,5 - ZMQ订阅者(subscriber)持续监听并将来自ZMQ服务器的消息保存到名为 subscriber.log 的文件中
创建服务器
首先看一下我们的Dockerfile
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y --force-yes python python-dev python-setuptools software-properties-common gcc python-pip
RUN apt-get clean all
RUN pip install pyzmq
RUN pip install Flask
ADD zmqserver.py /tmp/zmqserver.py
Flask Port
EXPOSE 5000
Zmq Sub Server
EXPOSE 4444
CMD ["python","/tmp/zmqserver.py"]
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯