nacos 简介
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
可结合Dubbo、spring cloud等框架进行分布式管理
功能和需求列表
- 服务发现
- 配置管理
- 元数据管理
- 地址服务器
Nacos-Docker
通过Docker部署可以降低耦合性,起到隔离的效果
rpc 概述
RPC 框架,远程过程调用协议RPC(Remote Procedure Call Protocol),允许像调用本地服务一样调用远程服务。
- 远程服务之间建立通讯协议
- 寻址:服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么
- 通过序列化和反序列化进行数据传递
优点
- 提升系统可扩展性
- 提升系统可维护性和持续交付能力
- 实现系统高可用
缺点
- RPC框架调用成功率受限于网络状况
常用的rpc框架
- Dubbo
- 优点:基于Netty的高性能框架,功能强大,不只是一个RPC框架,还是一个服务治理框架,是阿里巴巴开源的。
- 缺点:需要结合服务注册发现中心(Zookeeper、Eureka、Nacos等),会使简单的服务变复杂。
- Spring Cloud Fegin
- 优点:高性能RPC框架,java使用比较方便。
- 缺点:需要结合服务注册发现中心(Zookeeper、Eureka、Nacos等)
- jsonrpc
- 优点:无状态且轻量级的rpc框架,django框架支持,使用方便,以json格式传递数据
- 缺点:功能单一
结论
在轻量级服务创建推荐使用jsonrpc,既能提高服务性能,又能方便开发,降低服务构建成本,提高开发效率。
Django使用jsonrpc
- 安装:
pip install django-json-rpc
实现
- 添加web接口:
# 在相应的应用的view.py中
from jsonrpc import jsonrpc_method
@jsonrpc_method('myapp.rpcTest')
def rpc_test(request):
return [1, 2, 3]
@jsonrpc_method('myapp.rpcParamTest')
def rpc_param_test(request, *params):
return list(params)
- 添加路由
# 在wsgi同目录的urls.py文件中修改
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls')),
path('rpc/', jsonrpc_site.dispatch)
]
测试
- 请求地址:
http://127.0.0.1:8000/rpc/
- 请求参数
{
"method":"myapp.rpcTest"
}
- 返回结果
# 直接返回字典,结果存在result中
{'id': '7125c946-cdd9-11ec-bb58-5b03a0cec9e9', 'error': None, 'result': [1, 2, 3], 'jsonrpc': '1.0'}
服务rpc调用
from django.http import HttpResponse
from jsonrpc.proxy import ServiceProxy
url = 'http://localhost:8000/rpc/'
s = ServiceProxy(url)
def rpc(requests):
res = s.myapp.rpcTest()
if type(res['result']) is list:
return HttpResponse('rpc success')
return HttpResponse('rpc fault')
def rpc_params(request):
res = s.myapp.rpcParamTest(1, 2, 3)
if type(res['result']) is list:
return HttpResponse('rpc success')
return HttpResponse('rpc fault')