华为云云原生钻石集训营 第十五课:传统微服务框架接入Istio方案详解
709
2022-05-30
“Node 开发者容易面临的前三大困惑分别是异步编程、事件驱动以及 Debug。同时,文档是大家最期待的资源,新人对视频教程和免费在线课程的呼声最高。”这份《2020 年 Node.js 开发者调查报告》给出的信息,也正是当下很多开发者心中的疑惑。如何学习和进阶Node.js?如何让自己写的代码顺滑无bug?如何才能找到易用和高可用的平台呢?今天我来提点自己的拙见,看完觉得有用的老铁希望直接三连(球球你们不要”下次一定“)。
JavaScript相信大家都不陌生,尤其是对于前端工程师而言,更是必备技能。传统意义上的 JavaScript 是运行在浏览器上的脚本语言。而Node.js 是一个运行在服务端的框架,它的底层使用了 V8 引擎。我们知道 Apache + PHP 以及 Java 的 Servlet 都可以用来开发动态网页,Node.js 的作用与他们类似,只不过是使用 JavaScript 来开发。他提供了底层服务器功能环境,包括二进制数据操作、文件系统 I/O、数据库访问、网络访问等。它独一无二的特性使其在现存的多种成熟服务器语言中脱颖而出。
同样声名鹊起的还有华为云。近年来,华为云已经成为市场上的一股不容小觑的力量。尤其是前段时间,华为云鲲鹏生态带着铺天盖地的宣传横空出现,对其的评论的风向也是花样繁多,那么华为云鲲鹏弹性云服务器的表现究竟如何呢?本文将会带大家亲自感受一下在华为云鲲鹏弹性云服务器的 CentOS 系统上安装、部署、测试 Node.js 项目,以及其高可用性的探索。
话不多说,我们走起。
Node.js部署环境配置全流程
首先,输入以下命令”LANG=en_us.UTF-8 ssh root@EIP“登陆华为云,需要使用华为云服务器 ECS 的公网 IP 替换命令中的 EIP
一般本地服务器时可以直接获取公网IP,那么在华为云鲲鹏弹性云服务器,如何获取公网 IP 呢?而在云服务器中,弹性公网 IP 地址则可以通过点击“控制台”->“服务列表”->“计算”->“弹性云服务器 ECS”进入服务器列表,进行查看并复制。
在登陆时需要注意的是,输入密码的时候终端是不会有展示的,所以一定要确保密码是正确的。
登陆成功后显示的界面如下。
然后就可以下载 node.js 安装包了,执行下载命令
解压文件
为 node 和 npm 建立软连接,建立完软连接后可以直接查看 node 和 npm 的版本,出现下图即表示安装成功。
使用代码如下:ln -s /root/node-v10.16.0-linux-arm64/bin/node /usr/local/bin/node
ln -s /root/node-v10.16.0-linux-arm64/bin/npm /usr/local/bin/npm
其实到这里Node.js服务器环境就已经部署完毕了,可以直接运行项目代码 。但如果服务器上运行多个项目时,如果只安装一个全局的node.js版本,则在升级时可能会遇到很多问题。所以我们需要使用 nvm 版本管理器安装 node.js 多版本,这并不是一个必须的步骤,但是依然值得尝试。
首先,下载 NVM 版本管理器,并在终端中输入以下命令
git clone https://codehub.devcloud.cn-north-4.huaweicloud.com/Demo01087/nvm.git ~/.nvm && cd ~/.nvm
然后激活 NVM 版本管理器,并将其追加到 profile 文件下
echo ". ~/.nvm/nvm.sh" >> /etc/profile
NVM修改完毕后,就可以安装不同版本的node了,例如下图安装12.3.0的node包
node安装完毕后,就可以在服务器上运行脚本了。为了简化流程,我选择运行一个简单的脚本,利用node起一个服务器,部署在3000端口上。
服务器启动后,要想外网能够访问还需要再控制台配置下安全组规则。
到这里node.js的部署环境配置实测就已经结束了。来展示一下我的成品。
这次比较不按套路出牌,没有“hello world”
从前端语言到运维实践
在此次实践中,我们可以简单点评一下大鲲鹏带给我的直观的感知。首先,它对于新用户的友好度是很高的,以Node.js的部署环境配置来看,云端实验室中的鲲鹏实验中配置了相关的实验和ABC级别的指导教程,用户可以根据指导一步步实现环境配置,即便是小白程序员也能轻松上手;代码一键复制的功能对于并不熟悉linux命令的开发者而言也算是细致入微了。
随着竞争的加速,对于前后端的程序员都需要了解一些运维部署的知识,鲲鹏学院则提供了这样一个方便大家学习的平台。在这上面你能方便的获得小白开发者、鲲鹏开发者的相关课程,并且在完成了各类课程的学习之后,可以通过各类微认证和职业认证,来检验自身的学习成果,并且还能通过官方认证还能获取就业优先推荐机会,实用性这里必须加粗标红。
对于企业来说,把网站部署在云端能够减少大量的运维负担,充分利用华为云的基础生态和平台能力,可以减少建站部署的复杂程度,解放程序员双手,让大家不用秃头改代码收获幸福人生;降低程序员和产品经理的掐架频率。
随着网站用户访问量增大,系统服务很容易挂掉。例如微博突发热搜,淘宝的双十一等关键节点正是考验我们服务器能力的时候。很多大公司都会自研弹性负载均衡系统,但是管理两台机器的复杂程度不是管理一台机器的两倍,甚至是8倍、10倍。这其中需要考虑防火墙、抗DDoS攻击、监控报警、日志打点、数据同步等一系列问题,其实是一个很复杂的事情。因此,对于更多的企业站点使用云服务厂商提供的弹性负载均衡系统会更加的简单便捷,节省成本。
基于ELB和AS服务的高可用性解析
随着网站用户访问量增大,系统服务很容易挂掉。例如微博热门事件,淘宝的双十一等关键节点正是考验我们服务器能力的时候。很多大公司都会自研弹性负载均衡系统,但是管理两台机器的复杂程度不是管理一台机器的两倍,甚至是8倍、10倍。这其中需要考虑防火墙、抗DDoS攻击、监控报警、日志打点、数据同步等一系列问题,其实是一个很复杂的事情。所以,对于更多的企业站点使用云服务厂商提供的弹性负载均衡系统会更加的简单便捷,节省成本。
首先了解什么是高可用性,高可用性是系统一种特征或者指标,通常是指提供一定性能上的服务运行时间,高于平均正常时间段。反之,则消除系统服务不可用的时间。衡量系统是否满足高可用,就是当一台或者多台服务器宕机的时候,系统整体和服务依然正常可用。
举个例子,一些知名的网站保证 4 个 9 以上的可用性,也就是可用性超过 99.99%。那 0.01% 就是所谓故障时间的百分比。比如一些金融和电商网站都会对这些指标有严格的要求。
弹性伸缩服务能够在秒杀、抢购等流量激增的情况下能够确保服务器能够动态扩容,满足客户的良好体验。比如下单服务,当流量如潮水般涌过来的时候,ELB会根据算法动态的分配服务器资源,同时结合AS服务动态扩容服务器资源。
负载均衡是分布式系统架构设计中必须考虑的因素之一。一般通过负载均衡,解决分布式系统的大流量、高并发和高可用的问题。
那么在华为云鲲鹏弹性云服务器中,是如何保持高可用性的呢?其大体流程如下图所示:
1. 流量调度。ELB通过-检查连接请求,跟进调度算法定义的转发策略将请求流量分发至后端服务器,起到了交通指挥官的作用,但是他更加的智能。
2. 健康检查。判断后端服务器的业务可用性,确保将请求发送到健康的的ECS上。如果发现服务有问题也会进行及时摘除。
3. 会话保持。将一段时间内来自同一用户的请求转发到相同的后端服务器,保障用户访问的连续性。
4. 弹性伸缩。可以根据访问量自动扩展,保障业务灵活可用。例如上图中提到的利用定时/周期策略触发伸缩,当cpu/内存/入网流量等监控指标达到警告阀门也会触发伸缩。
搭产业顺风车,走开发快速道
开发产业的一个典型特征就是活到老、学到老,五年前的JavaScript和现在相比堪称天壤之别。研读Node.js 使用报告,发现 Node.js 的使用有许多的成长,而且,五年前的浏览器环境和现在的Node环境全然不同。在云时代,越来越多的语言创造了更多可能,也让开发变得更加便捷。就像此次测试中,基于JavaScript、Python、Java等解释型语言开发的应用程序,其与CPU架构并无相关,因此将这类应用程序移植到华为云鲲鹏弹性云服务器上之后,无需修改和重新编译,都可以按照与x86一致的方式部署和运行应用程序即可,对开发者的帮助是显而易见的。
语言的升级带来了便捷,也带来了一些新的趋势,越来越多企业将主体业务放到云端,越来越多的前端工程师关心并参与到后端和全栈的工作中去。开发需求升级,各类开发者社区也便跟着升级,而华为云鲲鹏社区便是一个这样的平台,其能够提供的技术能力不仅能够解决企业业务需求,还能快速赋能开发者,实现快速成长。开发者能方便的找到适合自己能力的相关开发课程来进行学习,学会使用这些更加高效的产品,让自己的价值不断上升,避免出现网传“35岁被扼颈”的窘迫局面。
更为可观的是,前端工程师远非云计算浪潮中最大的受益者。合理使用云服务器带来的ELB、AS等能力,能够让运维工程师从繁杂的工作中解脱出来,专注于系统的优化。目前,包括华为云在内的很多云服务能够提供大量的基础功能和运维工具,这些能力能够让自己脱离机械式编程工作,而是在不断的探索中发现更多高效、实用的工具,基于新的技术环境上实现适配性升级,避免频繁的重复造轮子,而是搭乘软件行业的顺风车,走上真正的开发快速道。
鲲鹏开发者系列课程传送门在此,良心知识不付费,参与回帖互动还有奖品拿,吐槽建议都阔以: http://suo.im/5t3Vgt
(图片来源网络,侵删)
鲲鹏 JavaScript Node.js
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。