今天跟大家聊下关于网关的话题
互联网公司,不论体量大小如何,其内部的技术架构基本都是相似的,体现在以下几个方面:
麻雀虽小五脏俱全,今天要讲的网关,就是其中的关键一环,不论公司规模大小如何,基本都要有这个系统。
那么网关是干什么用的?
网关是连接客户端与服务端的中间桥梁,将很多通用地
、非业务逻辑
抽离,前置到网关系统,减少了很多重复性开发工作,是整个网站的唯一流量入口。
为了提高系统的扩展性,网关通常采用组件式架构,高内聚低耦合。
常用的组件功能:
系统设计上一般采用责任链
设计模式,定义好抽象接口,每个组件实现自己的专属功能,职责单一。并且根据不同的业务请求API,添加、删除一些节点,动态构建新的节点链,从而满足多样化的业务需求。
1、Tomcat/Jetty+NIO+Servlet3
2、Nginx
3、Spring WebFlux
4、Soul
5、Spring cloud Gateway
6、Zuul
7、OpenResty
8、Kong
9、Netty 自建
各个框架的资料网上基本都有,考虑到篇幅限制,这里就不展开分析每个框架的优缺点(如果感兴趣,可以给我留言,人多的话我后面就单启一篇文章来讲一讲)。
我们计划选型 OpenResty,主要有以下几个原因:
下图是 Netcraft 最新统计的 2021年10月 Web 服务器排行榜
Netcraft 是一家总部位于英国巴斯始于 1995 年的互联网服务公司。该公司官网每月发布的调研数据报告:Web Server Survey 系列 已成为当今人们了解全球网站的服务器市场份额
来源:https://news.netcraft.com/archives/2021/10/15/october-2021-web-server-survey.html
OpenResty 现在全球排名第三,由于将Nginx扩展成动态服务器
,发展势头很猛。
我们常用的 12306 的余票查询功能,京东的商品详情页,这些高流量的背后,其实都是 OpenResty 在提供服务。
OpenResty 最擅长的是部署在流量入口处,处理各种高并发流量。
接下来,我们来深入了解下这个框架
nginx 采用 master-worker 进程模型,分工明确,职责单一,也是其具备高性能的原因之一。
1、master 进程
管理进程,处理指令如:-s reload
、-s stop
,通过进程间通信,将管理指令发送给worker进程,从而实现对worker进程的控制。
2、worker 进程
工作进程,不断接收客户端的连接请求,处理请求。数量通常设置为与CPU核数一致,nginx也会将每个进程与每个CPU进行绑定,充分利用其多核特性。
多个worker进程会竞争一个共享锁,只有抢到锁的进程才能处理客户端的请求。如果请求是accept事件,则会将其添加到accept队列中;如果是read或者write事件,则会将其添加到read-write队列。
可能有人问,OpenResty 为什么要基于 Nginx 框架?
主要还是看重了 Nginx 的高并发能力,反向代理服务器通常流量很大,本身不涉及复杂计算,属于I/O密集型服务。Nginx 采用基于 epoll 机制的事件驱动,异步非阻塞,大大提高并发处理能力。
但是 Nginx 采用 C 语言
开发,二次开发门槛较高。市场应用广泛,更多是基于 nginx.conf
预留配置参数,如:反向代理、负载均衡、静态web服务器,等
如果想让Nginx访问 MySQL ,定制化开发一些业务逻辑,难度很高。OpenResty 通过 嫁接方式,将 Nginx 和 Lua 脚本相结合,既保留 Nginx 高并发优势,也拥有脚本语言的开发效率,也大大降低了开发门槛。
Lua 是最快的、动态脚本语言,接近C语言运行速度。LuaJIT 将一些常用的lua函数和工具库预编译并缓存,下次调用时直接使用缓存的字节码,速度很快。
另外,Lua支持协程,这个很重要。
协程是用户态的操作,上下文切换不用涉及内核态,系统资源开销小;另外协程占用内存很小,初始 2KB
OpenResty是一个基于Nginx的Web平台,内部嵌入LuaJIT
虚拟机运行Lua脚本。使用 Lua 编程语言对 Nginx 核心以及各种 Nginx C 模块进行脚本编程。
yield
,让出CPU控制权注意:不同的lua协程之间数据隔离,从而保证了不同的客户端请求不会相互影响。另外,一个worker中同一时刻,只会有一个协程在运行。
cosocket 将 Lua 协程 + Nginx 事件通知两个重要特性组合。
cosocket 是 OpenResty 世界中技术、实用价值最高部分。让我们可以用非常低廉的成本,优雅的姿势,比传统 socket 编程效率高好几倍的方式进行网络编程。无论资源占用、执行效率、并发能力都非常出色。
为了方便开发,OpenResty 将一个 HTTP 请求划分为11个阶段,每个阶段有自己的专属职责。
函数功能说明:
OpenResty 提供了大量的 Lua API 接口,用于操作 Nginx 。只要熟悉lua语法,同时对 Nginx 的运行流程有较清楚理解,那么就可以轻松的在nginx上做二次开发。
无论是作为应用网关,还是高性能的web应用,支持连接各种丰富的后端存储,如:MySQL、Redis、Memcache、PostgreSQL 等,周边生态非常丰富。
https://github.com/openresty/lua-nginx-module/#accessbylua
注意:OpenResty 的 API 有使用范围限制,每个 API 都有与之对应的使用阶段列表,如果你超范围使用就会报错。
本文以 CentOS 系统中为例
1、添加 openresty 仓库,这样以后可以通过 yum updata
命令安装或更新我们的软件包
yum install yum-utils -y
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
2、安装软件
yum install openresty -y
3、安装命令行工具 resty
yum install openresty-resty -y
1、修改nginx.conf配置文件
worker_processes auto;
worker_rlimit_nofile 1000000;
events {
use epoll;
worker_connections 150000;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $content_length $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$upstream_response_time" "$request_time"';
access_log logs/access.log main;
server {
listen 8080;
location / {
access_by_lua_block {
local headers = ngx.req.get_headers(0)
local trace_id= headers["X-Trace-Id"]
ngx.log(ngx.ERR, trace_id)
}
# ngx.say("<p>hello !</p>")
proxy_pass http://168.12.8.10:8080;
}
}
server {
listen 8082;
location / {
default_type text/html;
content_by_lua_block {
ngx.say("<p>Hello Openresty!</p>")
}
}
}
}
nginx.conf 内部分为三层嵌套:
2、添加环境变量
echo "export PATH=$PATH:/usr/local/openresty/nginx/sbin" >> /etc/profile
source /etc/profile
3、启动 openresty,启动命令和nginx一致
nginx -c /usr/local/openresty/nginx/conf/nginx.conf
4、访问 Web 服务
curl http://localhost:8082/
如果正常,浏览器页面会输出 Hello Openresty!
5、如果 nginx.conf 配置项做了修改,我们可以重新启动
nginx -s reload
本文由哈喽比特于3年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/ypx1ZgRVfcN3HDd2Xi0zcg
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。