1. chmod +x ./test.sh #使脚本具有执行权限
  2. 变量名和等号之间不能有空格
  3. $ 表示当前Shell进程的ID,即pid $echo $$
  4. $ 和 $@ 都表示传递给函数或脚本的所有参数,当它们被双引号(“ “)包含时,”$“ 会将所有的参数作为一个整体,以”$1 $2 … $n”的形式输出所有参数;”$@” 会将各个参数分开,以”$1” “$2” … “$n” 的形式输出所有参数。
  5. -e 表示对转义字符进行替换 echo -e “Value of a is $a \n”1;

  6. 使用 echo 命令的 -E 选项禁止转义,默认也是不转义的;使用 -n 选项可以禁止插入换行符。

  7. 命令替换是指Shell可以先执行命令 DATE=date
变量 含义
$0 当前脚本的文件名
$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$# 传递给脚本或函数的参数个数。
$* 传递给脚本或函数的所有参数。
$@ 传递给脚本或函数的所有参数。被双引号(“ “)包含时,与 $* 稍有不同,下面将会讲到。
$? 上个命令的退出状态,或函数的返回值。
$$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
转义 含义
\ 反斜杠
\a 警报,响铃
\b 退格(删除键)
\f 换页(FF),将当前位置移到下页开头
\n 换行
\r 回车
\t 水平制表符(tab键)
\v 垂直制表符

变量替换:

形式 说明
${var} 变量本来的值
${var:-word} 如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word} 如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
${var:?message} 如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。若此替换出现在Shell脚本中,那么脚本将停止运行。
${var:+word} 如果变量 var 被定义,那么返回 word,但不改变 var 的值。

VMM(Virtual Machine Monitor 虚拟机监视器)

  • 运行在硬件平台 Xen
  • 运行在操作系统里 KVM

完全虚拟化:VMM虚拟现实存在的平台,客户机感觉不到,操作系统不用修改

Intel的VTx 在处理器上引入一个新的执行模式用于虚拟机,当虚拟机运行在这个模式中,它的任何特权操作都会被处理器截获并报告VMM.VMM运行在正常模式下,接收到处理器报告后,解码目标指令,找到相应的虚拟化模块进行模拟,并把效果反映在特殊模式的坏境中

类虚拟化

VMM虚拟现实不存在的平台,虚拟平台对客户机操作系统进行修改,客户机也会主动适应。通过在源代码级别修改指令来避免虚拟化漏洞,对呀X86中难以虚拟化的指令,修改内核来避免,并自定义基于事务的高度优化的I/O协议,达到近似物理机的性能

  • 动态迁移:

    • 将虚拟机从一个物理机快速移到另一个,程序和网络保持连接。在目的服务器建立相同配置的虚拟机,同步各种内部状态,难点是内存同步,有脏页。如果有VTd设备(网卡),需要使用Bonding Drive,一个网络接口绑定多个网卡和hotplug 热插拔
  • 虚拟机快照:

    • 保存虚拟机某一时刻的硬盘、内存、CPU等信息
  • 虚拟机克隆:

    • 把一个虚拟机的状态完全复制到另一个虚拟机 但要修改某些配置 如MAC 避免冲突
  • P2V( Physical to Virtual Machine):

    • 将物理机的操作系统、数据从物理硬盘移到虚拟机 降低服务器虚拟化的使用门槛
  • Xen:

    • 起源于剑桥 最初基于类虚拟化,修改linux内核来实现处理器和内存虚拟化,引入I/O的前端/后端驱动架构实现设备虚拟化,能达到接近物理机的效果。之后支持硬件完全虚拟化,如Intel的VT AMD-V

管理一个节点上的虚拟机 支持

  • LXC,轻量级Linux容器
  • OpenVZ,基于Linxu内核的轻量级Linux容器
  • KVM/QEMU,基于Linux的类型2(宿主)的VMM
  • Xen,开源的类型1(运行在硬件)的VMM
  • User-mode Linux(UML),系统调用级别的Linux虚拟机
  • VirtualBox,类型2的Vmm
  • VMwarte ESX and GSX ,VMware 虚拟化的服务器版
  • VMware Workstation and Player,VMware虚拟化的桌面版
  • Hyper-V 微软开发的VMM
  • PowerVM IBM开发的VMM 运行在AIX Linux
  • Bhyve FreeBSD 9+上的VMM

基于驱动的架构 每种VMM要提供一个Driver

体积优化

  • 全局图片开关管控,针对商品、店铺、页头、入口图等图片通过开关全局系数裁剪压缩处理,降低页面图片整体体积;
  • zCache打包,js和css离线化,减少固定大资源阻塞和请求时间耗损;

请求优化

  • 通过全局开关控制,针对走节点懒加载模块图片做域名收敛管控,降低Mobile端的http建连和dns握手的成本;
  • 常用图标iconfont化,减少请求;
  • 节点懒加载接入,避免非首屏dom载入;
  • 空背景图请求修复,避免资源耗损;
  • 模块小图片base64化,减少不必要的请求;

渲染优化

  • gif动画去处和部分模块高度计算有误兼容避免引起重绘性能耗损;

动态降频(页面渲染wormhole)

  • 整个渲染策略就是,定时备份页面到OSS集群,每次请求过来,都会去判断当前系统Load是否过载,若果过载则直接读取上次备份的页面返回,而不使用模板引擎渲染,达到动态降低系统负载,快速响应的目的。 如果发生了最极端的情况,源站全部挂掉,由当天的值班人员,手工切换CDN指向已经备份了的OSS文件,保障页面可访问。

CDN根据终端类型(使用user-agent判断)转发到node渲染服务

模块开发者需要编写一份模块需要数据的 JSON Schema 描述

每一个页面都变成了以下几个部分:

  • 一份页面的描述文件,声明了这个页面依赖的所有模块,以及渲染这些模块所需的数据的地址。
  • 一系列相互独立的模块。
  • 一份包含页面上所有模块需要的数据的数据文件。

node优化

对于 node 应用自身而言,我们首先要保证它有充足的测试,通过 mocha + istanbul ,尽可能让测试覆盖每一个功能点和边缘情况。

  • 没有单点 多个节点,主备读取,同时对所有的文件都加上磁盘文件容灾,每一个依赖都不能够出现单点问题
  • 弱化依赖 对于每个依赖异常都有容灾的方案

  • 预案自动化 对于每一个可能出现问题的环节,都需要有针对性的预案,做到自动化,通过健康检查自动剔除

  • 视窗内渲染,就是只渲染可视区域的元素,以减少绘制消耗

  • 懒加载,就是图片资源一开始是不加载的,在用户滚动到附近区域的时候才加载,减少网络请求

  • 加载限流 限制同时只能加载4个图片,并实时调整加载顺序,优先加载用户当前可见区域的图片

对于多尺寸图片

自动处理图片的gulp任务,可以自动生成多种尺寸的图片,然后压缩、上传到cdn,最后生成一个imgs.js的文件,使用只需要依赖这个js,然后以原始文件名引用即可