Django微服务思路
思路
之前实现了Nginx+uwsgi+daphne+django的单体架构服务器生产环境部署,实际上也相当于单体架构服务器上构建了微服务,借助使用了epoll的Nginx实现多个服务实例负载均衡。
但是如果要将django项目作为微服务部署到云微服务引擎上,还需要做一定的改造。
有几个思路:
-
思路一:
将Django应用作为多语言Mesh应用部署,可以成功上云,但是跟云上原有的其他Spring微服务可能没法很好地交互— 基本上就是通过RESTful服务,将应用程序或服务建模为一组资源,这些资源可以通过HTTP的网络调用进行访问和状态变更,但过于笨重、低效且容易出错。后期进行优化服务等在业务方面也需要使用Django处理。华为云CSE中可以用ServiceStage创建Mesher组件,然后部署Mesh应用,阿里云MSE和腾讯云TSF同理只不过没有Mesher。
思路一架构如图(以阿里云为例)
-
思路二:
借助nacos-group/nacos-sdk-python将Django项目直接注册到Nacos;博主@Kcang自己写了一个sdk完成注册:KcangNacos,还附上了flask应用的demo;
另外我自己使用hubertshelley/nacos_client_python完成django注册到Nacos,具体在这篇文章https://blog.csdn.net/m0_47634756/article/details/121024503
思路二之架构—以阿里云MSE为例
Django应用接入MSE治理中心—基于ACK / ASM / ECS
ASM服务网格
服务网格( Service Mesh )是指用于微服务应用的可配置基础架构层( configurable infrastructure layer )。它使每个service实例之间的通信更加流畅、可靠和迅速。服务网格提供了诸如服务发现、负载均衡、加密、身份鉴定、授权、支持熔断器模式( Circuit Breaker Pattern )以及其他一系列功能。
Service Mesh 实际是处于 TCP/IP 之上的一个抽象层,它假设底层的 L3/L4 网络能够点对点地传输字节(当然,它也假设网络环境是不可靠的,所以 Service Mesh 必须具备处理网络故障的能力)。
Service Mesh 有如下几个特点:
多语言支持:
支持几乎所有的语言,可以自由选择编程语言;
业务开发变革
降低入门门槛,提高稳定性;
业务开发团队从框架依赖中解放出来,回归业务;
强化运维管理
对系统强大的管理和控制力;
微服务治理的功能不再和应用有关。
ACK容器服务(Alibaba Cloud Container Service for Kubernetes,简称容器服务ACK)
可以部署K8s容器化应用(容器服务是什么?)
可以通过和Docker的区别来了解K8shttps://blog.csdn.net/txpp520/article/details/104660729
ACK中提供了几个版本的K8s供选择,可以参考该文档
ECS云服务器
可以先把项目部署到云服务器上再接入MSE
通过MSE完成微服务的服务治理
https://help.aliyun.com/document_detail/313299.html
实际要考虑的部署环境
oss完成分布式存储
cdn完成缓存
slb完成负载均衡
…
什么是云原生应用
以后尽量使用云原生应用框架来开发项目,最后部署上云可以省去很多麻烦。
引用知乎上腾讯云官方账号对云原生定义的回答:
云原生的定义在行业内可谓百家争鸣,如果给一个通俗的定义,大概是这样:一款应用在设计之初就考虑到如何在云上以最佳方式运行,能以最短路径上云,充分发挥云的优势。换言之,这款应用是因云而生的。
总结一下云原生的优势,大概有以下几点:
1)是更好的资源效率,可以用较少的服务器上运行相同数量的服务
2)云原生基础架构可实现更高的开发速度,从而更快地改善服务,以降低风险
3)云原生允许多云(在公共云之间切换或在多个云上运行)和混合云(在数据中心和公共云之间移动工作负载)
云原生的另一个定义来源是成立于2015年7月的云原生计算基金会(Cloud Native Computing Foundation,CNCF)。起初,CNCF给出的定义以下三方面:
1)应用容器化(Containerized)容器让我们的应用有一种完全自包含的定义方式,应用才能以一种敏捷的可扩展可复制的方式部署到云上,发挥出云的能力
2)动态编排调度(Dynamically orchestrated)由中心化的编排来进行活跃的调度和频繁的管理,从根本上提高机器效率和资源利用率,同时降低与运维相关的成本。
3)面向微服务(Microservices oriented)应用被拆分成微服务,这显著提高了应用的整体灵活性和可维护性
2018年后,CNCF给了另一版定义:
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
如果看了这么多内容而有点懵,建议拉回开头看看通俗版本的定义,或许有助于理解。希望这个回答能给你带来帮助。
作者:腾讯云 链接:https://www.zhihu.com/question/63927805/answer/737096504
来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。