Web技术最重要的载体便是服务器,服务器运行在公共的网络环境下,为广大的用户提供网页浏览、信息通讯、消息推送等服务,从最开始的硬件服务器到虚拟主机技术,再到虚拟化技术的出现和云概念的兴起,绝大部分都是基于Linux操作系统的,因此web工程中,Linux也是一枚举足轻重的角色,不过掌握一门Linux技术也是重中之重,个人认为《Linux就该这么学》这本书拿来入门还是挺不错的,下面将开始介绍Linux作为web技术的重要角色的几个要点。

图:WEB技术栈

1、 应用部署

绝大多数Web应用都承载在各大Linux发行版(如ubuntu 、redhat、centos)上,因此掌握Linux环境下的应用部署和日常维护尤为重要。下面列举一些典型的应用部署解决方案:

PHP:Nginx/LAMP(Linux+Apache+Mysql+PHP),提供HTTP(S)服务并提供PHP解析的Fastcgi;

JAVA WEB:Tomcat/Jboss,提供HTTP(S)服务、Servlet和JSP容器;

Node.js:pm2/nodemon:提供守护进程和集群管理服务,Node.js应用本身即可开启Server;

那么我们需要如何进行应用部署的技能补充呢?事实上,学习WEB应用部署并不难,首先我们需要扎实Linux的基本功:了解Linux操作系统概念和发行版、掌握基本的命令和程序安装的方法(通常我们会通过包管理器或者源码安装的方式进行)。接下来的步骤简化来说就是安装应用部署所需的环境、进行环境的配置、拉取项目代码、启动应用。

或许我们可以再前卫一些,通过虚拟化或者容器等技术去进行web应用的部署,都是依赖于上述这些最基本的套路。至于一些技术上细节和进阶的内容,可以通过相关的专业网站或书籍参考。

2、 日常维护

往往我们的Web应用在运行状态下,偶有意外发生,如服务不可用、性能瓶颈等,这时候我们便需要对应用的生产环境进行现场勘查。

通常情况下,我们首先会进行系统运行状态的检查,通过工具或命令采集和查看机器运行状态指数(CPU利用率、物理内存占用率、网络、IOPS等)、服务运行状态(服务可用性、响应速度、最大并发数等),基于以上的参数,我们可以建立监控系统和可视化平台,通过脚本收集参数信息,再通过WEB前端进行可视化的展示(nagios、zabbix等)。

接下来的重头戏则是日志系统,web应用中日志里保存了用户的操作和结果反馈,可以快速进行场景和行为的还原。一般我们会将日志分为两类:结构化日志和非结构化日志。非结构化日志(如log4j)主要是提供给开发者和维护者人工审阅和快速查询的,往往当用户量和数据量达到一定数量级时,会变得不利于阅读和分析,因此并不适合大规模的web应用场景。结构化日志(如bunyan)通过代码生成和序列化之后进行持久化存储,我们可以通过相应的工具进行海量日志的分析和挖掘,甚至可以直接和业务耦合,进行集中化的日志分析(如ELK的日志实时分析),缺点是需要通过工具转换成人工可阅读的文档。

基于日志分析和实时监控,我们可以从而建立警报系统,(当然监控以上提及的监控平台均提供了警报功能)通过邮件等方式将服务器运行状态、故障、意外事件等进行推送。

3、 性能优化和架构

一款好的产品总不会一成不变,web产品在发展过程中通常会遇到性能瓶颈,这时候我们便需要对应用进行优化,甚至对整体架构进行升级。

撇开Web应用本身的业务代码和逻辑上的优化点不说,且讲一下在Linux环境下的优化策略,而其最重要的便是参数调优,主要解决Linux默认配置带来的性能问题,其中主要的一些调优点为:打开文件树(limits)、内核参数调优(协议栈中的各参数、网络接口队列等),通常情况下,我们需要对实际的服务环境进行参数的调整。

当我们的web应用在不断的遇到性能瓶颈和升级优化之后,整体架构也会随之演化,从最开始的单机的架构到横向扩展(升级硬件配置、增加机器数量)架构,再到纵向扩展(数据库读写分离、业务切分等)架构,然后成为面向服务的分布式集群,甚至结合新兴的大数据等技术建立高可用的集群。

对于web开发者而言,Linux的知识和技能掌握是非常重要的,我们尤其需要一套渐进式的学习路径去熟悉和巩固,其中为代表的书籍《Linux就该这么学》提供了大部分的Linux基础学习和实战教程,非常值得阅读几番。当遇到一些难以处理的场景,需提高自身解决问题的能力,合理利用Linux开源社区的资源快速找到解决方案。

web技术栈中不可或缺的Linux技术的更多相关文章

  1. 细数Javascript技术栈中的四种依赖注入

    作为面向对象编程中实现控制反转(Inversion of Control,下文称IoC)最常见的技术手段之一,依赖注入(Dependency Injection,下文称DI)可谓在OOP编程中大行其道 ...

  2. TICK技术栈(一)TICK技术栈介绍

    1.什么是TICK技术栈? 1.1 简介 TICK 是由 InfluxData开发的一套开源工具栈,由 Telegraf, InfluxDB, Chronograf, Kapacitor 四个工具的首 ...

  3. .Net 微服务架构技术栈的那些事

    一.前言 大家一直都在谈论微服务架构,园子里面也有很多关于微服务的文章,前几天也有一些园子的朋友问我微服务架构的一些技术,我这里就整理了微服务架构的技术栈路线图,这里就分享出来和大家一起探讨学习,同时 ...

  4. 快速了解Scala技术栈

    http://www.infoq.com/cn/articles/scala-technology/ 我无可救药地成为了Scala的超级粉丝.在我使用Scala开发项目以及编写框架后,它就仿佛凝聚成为 ...

  5. Parcel:常见技术栈的集成方式

    前言 Parcel 是什么 Parcel 是一个前端构建工具,Parcel 官网 将它定义为极速零配置的Web应用打包工具.没错,又是一个构建工具,你一定会想,为什么前端的构建工具层出不穷,搞那么多工 ...

  6. 【Scala】Scala技术栈

    快速了解Scala技术栈 我无可救药地成为了Scala的超级粉丝.在我使用Scala开发项目以及编写框架后,它就仿佛凝聚成为一个巨大的黑洞,吸引力使我不得不飞向它,以至于开始背离Java.固然Java ...

  7. 聊聊真实的 Android TV 开发技术栈

    智能电视越来越普及了,华为说四月发布智能电视跳票了,一加也说今后要布局智能电视,在智能电视方向,小米已经算是先驱了.但是还有不少开发把智能电视简单的理解成手机屏幕的放大,其实这两者并不一样. 一.序 ...

  8. 为什么新的5G标准将为技术栈带来更低的 TCO

    ​ 摘要 新5G标准和边缘计算对低延迟的要求,给那些试图将一堆不同组件组装成一个不会出现故障且仍具有低延迟的高成本效益应用程序公司带来了严峻的挑战.事实上,这个问题非常严重,以至于需要重新考虑架构. ...

  9. 理解 Linux 网络栈(2):非虚拟化Linux 环境中的 Segmentation Offloading 技术

    本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + Vx ...

随机推荐

  1. leecode第一百二十二题(买卖股票的最佳时机II)

    class Solution { public: int maxProfit(vector<int>& prices) { int len=prices.size(); ) ; , ...

  2. Object_C与JavaScript交互使用总结

    iOS开发中oc与js交互的方式有很多,我们可以使用流行的第三方库如:WebviewJavaScriptBridge和OVGap,这两个库都是让webview与JS建立起一条桥梁,我们也可以使用iOS ...

  3. VNC安装配置

    1,安装VNC yum install tigervnc-server -y2,设定密码: vncpasswd root 3,配置服务文件,下面是配置了6个窗口. cp /lib/systemd/sy ...

  4. Codeforces 1043 F - Make It One

    F - Make It One 思路: dp + 容斥 首先, 答案不会超过7, 因为前7个质数的乘积大于3e5(最坏的情况是7个数, 每个数都缺少一个不同的因子) 所以从1到7依次考虑 dp[i][ ...

  5. Codeforces 961E - Tufurama

    961E - Tufurama 思路: 线段树或者分块 遍历 1 - n - 1,求 区间[i + 1, min(a[i], n)]大于等于 i 的个数,累加起来 线段树: #include<b ...

  6. MATLAB 矩阵处理基础

  7. <山月记>:中岛敦 -选段

    因为害怕自己并非明珠而不敢刻苦琢磨,又因为有几分相信自己是明珠,而不能与瓦砾碌碌为伍,遂逐渐远离世间,疏避人群,结果在内心不断地用愤懑和羞怒饲育着自己懦弱的自尊心.世上每个人都是驯兽师,而那匹猛兽,就 ...

  8. Getting started with Processing 第十三章——延伸(2)

    与 Arduino 联动 在 Processing 中,可以通过:import processing.serial.* Serial port; //声明串口对象port = new Serial(t ...

  9. 2017-2018-2 20165327 实验四《Android程序设计》实验报告

    2017-2018-2 20165327 实验四<Android程序设计>实验报告 任务一 Android Stuidio的安装测试: 任务要求 参考Android开发简易教程,安装 An ...

  10. 20180831xlVBA_WorksheetsCosolidate

    Sub WorkSheetsConsolidate() Rem 设置求和区域为 单元格区域;单元格区域 Const Setting As String = "A1;B2:C4" D ...