2019独角兽企业重金招聘Python工程师标准>>>
书接上回,前面我们说道如何使用consul进行服务发现和治理,这节来说说如何利用Nginx做CoAp服务负载均衡。
前面我们代码和服务架构中只有一个CoAp服务,这种但节点一旦发生故障就意味这整个CoAp服务无法正常使用,并且单台机器的性能是有限的(虽然是udp无连接协议),我们需要能随着接入量的增大而进行动态的扩展,就需要使用反向代理和负载均衡,而nginx是这里面的佼佼者,所以这里我们也就理所应当的选择了nginx。
开始之前先简单聊聊什么叫反向代理,负载均衡,以及正向代理!
反向代理
指代理服务器的服务,如这里我们本意是想访问CoAp服务器,但是我们实际访问的是nginx服务,再由Nginx服务转发到CoAp服务器,这种客户端并不知道访问的服务器是不是真正意义上的目标服务器,而是由客户端直接访问的服务器做转发,就是反向代理。
正向代理
正向代理与反向代理正好相反,方向代理是客户并不知道所访问的服务器是不是目标服务器,而正向代理是服务器并不知道建立访问的客户端是不是真正意义上的客户,如我们无法访问国外的网站,这个时候大家怎么搞,基本上就是弄个跳板机,我们访问跳板机,再由跳板机去访问国外的网站,然后把数据返回给我们,国外网站认为访问它的客户端是这台跳板机,但实际访问它的客户端是我们,所以这种服务器并不知道真实的客户端叫正向代理,简而言之,正向代理就是代理的客户。
负载均衡
一台机器的性能是有限的,就算你的机器是如何如何吊的全国第一,全球第一,但总归是有个上限的,并且这个上限达不到我们处理业务所需要的性能的时候,这个时间最简单的办法是什么,一台不够搞多台呗,好的,现在多台机器已经部署好,可问题又来了,每台机器都有自己独立的IP地址,并且机器多了万一有台机器突然挂掉了,总不能叫客户端一会儿换一个IP地址嘛,所以我们需要有统一的访问入口,反向代理的用处就凸显出来了,但还有一个问题没有解决,那就是多台机器访问量怎么分配,如果有机器挂了,怎么把这台机器踢出去,负载均衡的用处也就凸显出来了。
负载均衡有三个基本要素 负载均衡算法:用来解决如何分配访问量的问题,如随机算法,轮询,哈希算法等等。 健康检查:用来解决如果有机器挂了,把机器踢出不影响访问的问题,如心跳机制,dns检测等。 会话保持:用来保证会话的连续性和一致性,比如你去淘宝买东西,在A服务器登录,在B服务器下订单,这个时候你得让B服务器知道你已经登录。
nginx简介
nginx是高性能的http和反向代理web服务器,当然它可以可以代理其它的网络协议,如tcp,smtp,udp等。它采用可预见进程模型,由事件驱动,有一个master进程和多个work进程,还有用于辅助的helper进程。
master进程:读取配置文件,绑定端口,创建子线程 缓存加载进程:启动时运行,加载磁盘的缓存数据到内存中 缓存管理进程:周期运行,消减磁盘的缓存数据 work进程:实际的工作进程,网络链接,读写磁盘内容,与上游服务器通信,每个work进程只有一个线程在运行,nginx建议1个cpu一个work进程。
nginx安装
我这里用的是Ubuntu 18
- 下载wget http://nginx.org/download/nginx-1.11.3.tar.gz
- 解压 tar -xvf nginx-1.11.3.tar.gz , cd nginx-1.11.3
- nginx对udp的转发需要ngx_stream_core的支持,默认nginx是不开启此模块的,需要手动安装,./configure --prefix=/usr/local/nginx --with-stream
- make
- make install
这个过程中可能会缺少依赖,根据提示的错误信息安装对应依赖就可以了。
修改配置文件 vim /usr/local/nginx/conf/nginx.conf
笔者这里只有搞了一台服务器(捂脸穷)
启动 nginx ./sbin/nginx 可能会出现端口占用的错误,修改一下端口就行了,笔者这里修改为8088
server {
listen 8088;
server_name localhost;
#charset koi8-r;
放问一下 http://127.0.0.1:8088/
出现图中信息就启动好了
修改iot-coap-client
前面我们是直接访问CoAp服务器,现在改为访问Nginx服务,看一下是否能把请求代理过去,完成数据的发送。
直接访问CoAp服务端口为5683,nginx转发端口为8989,这里使用转发的8989端口
URI uri = new URI("coap://127.0.0.1:8989/iot-byte?201904151718");
启动iot-coap-server ,iot-coap-client
iot-coap-client日志
iot-coap-server日志
请求经过nginx转发到了目标iot-coap-server服务。
结束语
笔者这里只有一台机器,所以只配置了基础配置,想了解关于nginx的知识的点击这里
https://www.cnblogs.com/knowledgesea/p/5175711.html
https://www.cnblogs.com/chenjfblog/p/8715580.html
https://www.jianshu.com/p/6215e5d24553
https://gitee.com/distant/iot-pt.git