低配服务器部署项目的思考

背景:

小公司意图构建官网,客户资源管理系统。但是老板对IT预算并没有那么多预算,所以采用借助云服务器方案阿里云搭建成本较小甚至免费的云环境。阿里云首次注册赠送12月的免费ECS服务器(配置项 cpu: 2核 ram: 2g bandwidth: 1Mbps 操作系统: centos 7)

问题:

毕竟使用免费的云资源(我想估计是仅供学习使用的),使用低配的云服务去构建公司官网(一个前端node, 一个后端java),客户资源系统(一个前端node,一个后端java),基础资源Mysql, Redis, Rabbitmq, jenkins等,更别说分布式系统辅助资源。

记得当时搭建完成启动应用后,使用一段时间后系统莫名其妙报错“网络异常”,后来一看才知道是Mysql被打挂了。无奈添加监听程序,检测到MYSQL运行异常,每次需要重新手动重启恢复。

这时候内存使用率已经达到95%以上,CPU使用率90%以上。毫无疑问,根本无法支持部署两个系统。

解决思路:

采用轻量级软件,占用内存较少的软件

首先想到就是NGINX,轻量级反向代理服务器

Nginx(engine x) 是一个高性能的HTTP反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是如何做到轻量级的呢?

关键在于Nginx实现原理采用单线程,非阻塞模型和异步IO模型

并且使用多路复用IO技术epoll,在一个线程中执行所有请求,这样做法避免大量的线程的创建,消耗大量CPU,RAM资源

当一个 IO 操作开始的时候,Nginx 不会等待操作完成就会去处理下一个请求,等到某个 IO 操作完成后,Nginx 再回过头去处理这次 IO 的后续工作。

epoll

上图为多路复用原理

各个work进程间通过accept_mutex互斥锁进行连接的获取,以防止惊群现象的发生(即所有进程都收到通知,却只有一个进程执行)。负载的实现通过accept_mutex_disable=所有连接数/8-空闲连接数,该值越大越不容易去获取accept_mutex锁,也即空闲连接数小于所有连接数的1/8时,不再去主动获取连接。

下面将隆重介绍解决低配资源的应用容器Docker

docker

Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低

docker直接利用宿主机的系统内核,避免了虚拟机启动时所需的系统引导时间和操作系统运行的资源消耗。利用docker能在几秒钟之内启动大量的容器,这是虚拟机无法办到的。快速启动、低系统资源消耗的优点使docker在弹性云平台和自动运维系统方面有着很好的应用前景。

docker 容器是如何做到轻量级的呢?

docker镜像是一个“应用程序和它运行依赖环境”的封装。当镜像运行起来后,即是docker容器。运行时的容器本质是操作系统下的一个进程,这些进程共享同一个宿主机OS的内核。

与传统VM相比,docker是一种操作系统虚拟化技术,并不需要在镜像内安装GuestOS。

docker在共享宿主机内核的基础上包装内核提供的一系列API,这些API中最重要的就是namespace和cgroup。通过namespace实现隔离,通过cgroup实现资源限制。

可以看出docker容器运行的进程和服务器宿主机共享一个内核,并且是运用到虚拟化技术。它同传统虚拟机不同的是,docker虚拟化是没有Guest OS的,也就是说docker会比虚拟机省去创建OS的一系列占用宿主机硬件资源的复杂操作。所以,docker容器会启动更快,效率更高。

在使用一系列提升性能的程序之后,两个系统程序包括基础资源都能顺利启动,CPU占用率仅仅只是50%,内存也就占用率达到80%下,不禁感叹道Docker makes me happy again again!!!!!

cpu​
ram

通过portainer.io监控docker容器的运行状态

portainer.io

致谢相关知识资源的网络提供者

2020.10.10

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354