服务器
Linux
Linux是一种自由和开放源码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布,再加上用户空间的应用程序之后,就成为了Linux操作系统。Linux也是自由软件和开放源代码软件发展中最著名的例子。只要遵循GNU 通用公共许可证(GPL),任何个人和机构都可以自由地使用Linux的所有底层源代码,也可以自由地修改和再发布。大多数Linux系统还包括像提供GUI的X Window之类的程序。除了一部分专家之外,大多数人都是直接使用Linux 发行版,而不是自己选择每一样组件或自行设置。
Linux严格来说是单指操作系统的内核,因操作系统中包含了许多用户图形接口和其他实用工具。如今Linux常用来指基于Linux的完整操作系统,内核则改以Linux内核称之。由于这些支持用户空间的系统工具和库主要由理查德·斯托曼于1983年发起的GNU计划提供,自由软件基金会提议将其组合系统命名为GNU/Linux([7])([8]),但Linux不属于GNU计划,这个名称并没有得到社群的一致认同。
Linux最初是作为支持英特尔x86架构的个人电脑的一个自由操作系统。目前Linux已经被移植到更多的计算机硬件平台,远远超出其他任何操作系统。Linux可以运行在服务器和其他大型平台之上,如大型计算机和超级计算机。世界上500个最快的超级计算机已100%运行Linux发行版或变种([9])。Linux也广泛应用在嵌入式系统上,如手机(Mobile Phone)、平板电脑(Tablet)、路由器(Router)、电视(TV)和电子游戏机等。在移动设备上广泛使用的Android操作系统就是创建在Linux内核之上。
通常情况下,Linux被打包成供个人计算机和服务器使用的Linux发行版,一些流行的主流Linux发布版,包括Debian(及其派生版本Ubuntu、Linux Mint)、Fedora(及其相关版本Red Hat Enterprise Linux、CentOS)和openSUSE等。Linux发行版包含Linux内核和支撑内核的实用程序和库,通常还带有大量可以满足各类需求的应用程序。个人计算机使用的Linux发行版通常包含X Window和一个相应的桌面环境,如GNOME或KDE。桌面Linux操作系统常用的应用程序,包括Firefox网页浏览器、LibreOffice办公软件、GIMP图像处理工具等。由于Linux是自由软件,任何人都可以创建一个符合自己需求的Linux发行版。
CentOS
CentOS(Community Enterprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux(RHEL)依照开放源代码规定发布的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同,在于CentOS并不包含封闭源代码软件。CentOS 对上游代码的主要修改是为了移除不能自由使用的商标。([3])2014年,CentOS宣布与Red Hat合作([4]),但CentOS将会在新的委员会下继续运作,并不受RHEL的影响([5])。
CentOS和RHEL一样,都可以使用Fedora EPEL来补足软件。
2020年12月8日,红帽公司宣布将停止开发CentOS。为此,CentOS的创始人Gregory Kurtzer宣布将启动一个新项目,以实现CentOS的原始目标,即Rocky Linux。
目前CentOS更上游的分支CentOS Stream开发仍在继续。
Ubuntu
Ubuntu(国际音标:/ʊˈbʊntuː/,uu-BUUN-too)([7])([8])是基于Debian,以桌面应用为主的Linux发行版。Ubuntu有三个正式版本,包括桌面版、服务器版及用于物联网设备和机器人的Core版。前述三个版本既能安装于实体电脑,也能安装于虚拟电脑。从17.10版本开始,Ubuntu以GNOME为默认桌面环境。([9])
Ubuntu是著名的Linux发行版之一,也是目前最多用户的Linux版本。Ubuntu每六个月(即每年的四月与十月)发布一个新版本,长期支持(LTS)版本每两年发布一次。普通版本一般只支持9个月,但LTS版本一般能提供5年的支持。
Ubuntu由英国Canonical公司发布,他们提供商业支持([10])。它是基于自由软件,其名称来自非洲南部祖鲁语或科萨语的“Ubuntu”一词(译为乌班图),意思是“人性”、“我的存在是因为大家的存在”,([11])是非洲传统的一种价值观。
Canonical由南非企业家Mark Shuttleworth创立。Canonical通过销售与Ubuntu相关的技术支持和其他服务来产生收益。([12])Ubuntu项目公开承诺开源软件开发的原则;鼓励人们使用自由软件,研究它的运作原理,改进和分发。([13])([14])
Debian
Debian(/ˈdɛbiən/([6]))是完全由自由软件组成的类UNIX操作系统,其包含的多数软件使用GNU通用公共许可协议授权,并由Debian计划的参与者组成团队对其进行打包、开发与维护。
Debian计划最初由伊恩·默多克于1993年发起,Debian 0.01版在1993年9月15日发布([7]),而其第一个稳定版本则在1996年发布。([8])
该计划的具体工作在互联网上协调完成,由Debian计划领导人带领一个志愿者团队开展工作,并以三份奠基性质的文档作为工作指导:Debian社群契约、Debian宪章和Debian自由软件指导方针。操作系统版本定期进行更新,候选发布版本将在经历过一定时间的冻结之后进行发布。
作为最早的Linux发行版之一,Debian在创建之初便被定位为在GNU计划的精神指导下进行公开开发并自由发布的项目。该决定吸引自由软件基金会的注意与支持,他们为该项目提供从1994年11月至1995年11月为期一年的赞助。([9])赞助终止后,Debian计划创立非营利机构Software in the Public Interest以提供支持并令其持有Debian商标作为保护机构。Debian也接受世界多个非营利组织的资金支持。
Unix shell
Unix shell,一种壳层与命令行界面,是 UNIX 操作系统下传统的用户和计算机的交互界面。第一个用户直接输入命令来执行各种各样的任务。
普通意义上的 shell 就是可以接受用户输入命令的程序。它之所以被称作 shell 是因为它隐藏了操作系统低层的细节。同样的 Unix 下的图形用户界面 GNOME 和 KDE,有时也被叫做“虚拟 shell”或“图形 shell”。
Unix 操作系统下的 shell 既是用户交互的界面,也是控制系统的脚本语言。当然在这点也有别于 Windows 下的命令行,虽然也提供了很简单的控制语句。在 Windows 操作系统下,可能有些用户从来都不会直接的使用 shell,然而在 Unix 系列操作系统下,shell 仍然是控制系统启动、X Window 启动和很多其他实用工具的脚本解释程序。
Z shell
Unix shell,一种壳层与命令行界面,是UNIX操作系统下传统的用户和计算机的交互界面。第一个用户直接输入命令来执行各种各样的任务。
普通意义上的shell就是可以接受用户输入命令的程序。它之所以被称作shell是因为它隐藏了操作系统低层的细节。同样的Unix下的图形用户界面GNOME和KDE,有时也被叫做“虚拟shell”或“图形shell”。
Unix操作系统下的shell既是用户交互的界面,也是控制系统的脚本语言。当然在这点也有别于Windows下的命令行,虽然也提供了很简单的控制语句。在Windows操作系统下,可能有些用户从来都不会直接的使用shell,然而在Unix系列操作系统下,shell仍然是控制系统启动、X Window启动和很多其他实用工具的脚本解释程序。
Bash
Bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括Linux与Mac OS X v10.4起至macOS Mojave都将它作为默认shell,而自macOS Catalina,默认Shell以zsh取代。
Bash是Bourne shell的后继兼容版本与开放源代码版本,它的名称来自Bourne shell(sh)的一个双关语(Bourne again / born again):Bourne-Again SHell。
Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。和其他Unix shell 一样,它支持文件名替换(通配符匹配)、管道、here文档、命令替换、变量,以及条件判断和循环遍历的结构控制语句。包括关键字、语法在内的基本特性全部是从sh借鉴过来的。其他特性,例如历史命令,是从csh和ksh借鉴而来。总的来说,Bash虽然是一个满足POSIX规范的shell,但有很多扩展。
一个名为Shellshock的安全漏洞在2014年9月初被发现,并迅速导致互联网上的一系列攻击。这个漏洞可追溯到1989年发布的1.03版本。
whoami
whoami是操作系统中用于查看当前有效用户名的命令,自 Windows Server 2003 以来每个 Windows 操作系统和大多数类 Unix 操作系统上都可以找到。它是英文“Who am I?”(我是谁?)的拼接结果。当被调用时,打印当前用户的有效用户名。它与 Unix 命令id -un具有相同的效果。
在类Unix操作系统上,命令的输出与USER输出用于登录的用户名。例如,假使用户以用户名John登录并使用命令su(su默认不调用login shell)获得了root权限,此时若使用whoami命令会输出root,而echo $USER对应的输出则是John。
该程序最早创建于 BSD 2.9 中,作为命令“who am i”我是谁的一种便利形式,即伯克利 Unix(Berkeley Unix)打印登录用户身份的方式。([1]) GNU版本由Richard Mlynarik编写,是GNU 核心工具组(coreutils)的一部分。
该命令也可作为 Windows 2000 Resource Kit([2])和 Windows XP SP2 支持工具的一部分([3])。
除此以外,文件服务器上Netware的公共文件夹内也包含了该程序。它还输出当前工作站所连接的服务器的用户名。
数据库
MySQL
MySQL(官方发音为/maɪ ˌɛskjuːˈɛl/“My S-Q-L”([5]),但也经常被读作/maɪ ˈsiːkwəl/“My Sequel”)原本是一个开放源码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被昇阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品。
MySQL在过去由于性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用,比如维基百科、Google和Facebook等网站。非常流行的开源软件组合LAMP中的“M”指的就是MySQL。
但被甲骨文公司收购后,Oracle大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目OpenSolaris的发展,因此导致自由软件社群们对于Oracle是否还会持续支持MySQL社群版(MySQL之中唯一的免费版本)有所隐忧,MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划MariaDB。而原先一些使用MySQL的开源软件逐渐转向MariaDB或其它的数据库。例如维基百科已于2013年正式宣布将从MySQL迁移到MariaDB数据库([6])。
MySQL的license现在分为免费的社区版与收费的标准版、企业版等([7])。一般说来,如果在非开源项目中发布了MySQL,或者需要Oracle公司提供对MySQL的技术支持,或者使用MySQL的一些企业版工具或插件,或者修改MySQL源代码并作为闭源的软件等等情形,需要购买商业版本。如果只是安装并使用MySQL,甚至修改并使用MySQL,无论是否收费;或者软件中不包含MySQL,软件的用户自行安装MySQL;或者使用GPL协议的开源软件产品中包含了MySQL,这些情形可能使用社区版MySQL。
MongoDB
MongoDB是一种面向文档的数据库管理系统,用C++等语言撰写而成,以解决应用程序开发社区中的大量现实问题。MongoDB由MongoDB Inc.(当时是10gen团队)于2007年10月开发,2009年2月首度推出,现以服务器端公共许可(SSPL)分发。
关系数据库
关系数据库(英语:Relational database),是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。
关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
NoSQL
NoSQL(最初表示Non-SQL([1]),后来有人转解为Not only SQL([2])([3])),是对不同于传统的关系数据库的数据库管理系统的统称。
允许部分资料使用SQL系统存储,而其他资料允许使用NOSQL系统存储。其数据存储可以不需要固定的表格模式以及元数据(metadata),也经常会避免使用SQL的JOIN操作,一般有水平可扩展性的特征。
Redis
Redis是一个使用ANSI C编写的开源、支持网络、基于内存、分布式、可选持久性的键值对存储数据库。从2015年6月开始,Redis的开发由Redis Labs赞助,而2013年5月至2015年6月期间,其开发由Pivotal赞助。([2])在2013年5月之前,其开发由VMware赞助。([3])([4])根据月度排行网站DB-Engines.com的数据,Redis是最流行的键值对存储数据库。([5])
Ruby
Ruby 是一种面向对象、指令式、函数式、动态的通用编程语言。在20世纪90年代中期由日本计算机科学家松本行弘(Matz)设计并开发。
遵守BSD许可证和Ruby License([10])([注 1])。它的灵感与特性来自于Perl、Smalltalk、Eiffel、Ada以及Lisp语言。由Ruby语言本身还发展出了JRuby(Java平台)、IronRuby(.NET平台)等其他平台的Ruby语言替代品。
Nginx
Nginx(发音同“engine X”)是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。该软件由俄罗斯程序员伊戈尔·赛索耶夫(Игорь Сысоев)开发并于2004年首次公开发布([6])。2011年成立同名公司以提供支持服务([7])。2019年3月11日,Nginx公司被F5网络公司以6.7亿美元收购([8])。
Nginx是免费的开源软件,根据类BSD许可证的条款发布。一大部分Web服务器使用Nginx([9]),通常作为负载均衡器。([10])
网络
Reverse proxy 反向代理
反向代理在电脑网络中是代理服务器的一种。服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器集群的存在[1]。
与前向代理不同,前向代理作为客户端的代理,将从互联网上获取的资源返回给一个或多个的客户端,服务端(如Web服务器)只知道代理的IP地址而不知道客户端的IP地址;而反向代理是作为服务器端(如Web服务器)的代理使用,而不是客户端。客户端借由前向代理可以间接访问很多不同互联网服务器(集群)的资源,而反向代理是供很多客户端都通过它间接访问不同后端服务器上的资源,而不需要知道这些后端服务器的存在,而以为所有资源都来自于这个反向代理服务器。
反向代理在现时的互联网中并不少见,而另一些例子,像是CDN、SNI代理等,是反向代理结合DNS的一类延伸应用。
CDN 内容分发网络
内容分发网络(英语:Content Delivery Network或Content Distribution Network,缩写:CDN)是指一种透过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。
HTTP 超文本传输协议
超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议([1])。HTTP是万维网的数据通信的基础。
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。
2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论([2]),于2015年2月17日被批准。([3]) HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。([4])
HTTPS 超文本传输安全协议
超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议([1])。HTTP是万维网的数据通信的基础。
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(World Wide Web Consortium,W3C)和互联网工程任务组(Internet Engineering Task Force,IETF)进行协调,最终发布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。
2014年12月,互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组将HTTP/2标准提议递交至IESG进行讨论([2]),于2015年2月17日被批准。([3]) HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。([4])
IPS 互联网协议套件
互联网协议套件(英语:Internet Protocol Suite,缩写IPS)([1])是网络通信模型,以及整个网络传输协议家族,为网际网络的基础通信架构。它常通称为TCP/IP协议族(英语:TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP([2])。因为该协议家族的两个核心协议:TCP(传输控制协议)和IP(网际协议) ,为该家族中最早通过的标准([3])。由于在网络通讯协议普遍采用分层的结构,当多个层次的协议共同工作时,类似计算机科学中的堆栈,因此又称为TCP/IP协议栈(英语:TCP/IP Protocol Stack)([4])([5]) 。这些协议最早发源于美国国防部(缩写为DoD)的ARPA网项目,因此也称作DoD模型(DoD Model)([6])。这个协议族由互联网工程任务组负责维护。
TCP/IP提供了点对点链接的机制,将资料应该如何封装、寻址、传输、路由以及在目的地如何接收,都加以标准化。它将软件通信过程抽象化为四个抽象层,采取协议堆栈的方式,分别实现出不同通信协议。协议族下的各种协议,依其功能不同,分别归属到这四个层次结构之中([7])([8]),常视为是简化的七层OSI模型。
OSI 模型
- 应用层(application layer):HTTP、SMTP、FTP、SSH、DNS
- 表示层(presentation layer):ASCLL
- 会话层(session layer):RPC
- 传输层(transport layer):TCP、UDP、TLS/SSL、RTP
- 网络层(network layer):IP(IPv4、IPv6)、ICMP
- 数据链路层(data link layer):以太网、MAC
- 物理层(physical layer):调制调节器、无线电、光纤
为什么 DNS 使用 UDP 而不是 TCP?
DNS 在进行区域传输的时候使用 TCP,普通的查询使用 UDP。为什么查询是使用 UDP 呢?网络上大部分答案都说 UDP 性能更好,打开网页速度快。如果是这样的话,为什么 HTTP 却是使用 TCP 呢?
浏览器响应时间= DNS 域名解析时间+ TCP 连接建立时间 + HTTP 交易时间 采用 TCP 传输,则域名解析时间为:DNS 域名解析时间 = TCP 连接时间 + DNS 交易时间 采用 UDP 传输,则域名解析时间为:DNS 域名解析时间 = DNS 交易时间
总结:
- 使用 UDP 传输是由于效率高,传输小于等于 512 字节报文。
- 使用 TCP 传输是由于可以传输大于 512 字节报文。
TCP 传输控制协议
传输控制协议(英语:Transmission Control Protocol,缩写:TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。用户数据报协议(UDP)是同一层内另一个重要的传输协议。
在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来透过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认信息(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失并进行重传。TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和。
UDP 用户数据报协议
用户数据报协议(英语:User Datagram Protocol,缩写:UDP;又称用户数据包协议)是一个简单的面向数据包的通信协议,位于OSI模型的传输层。该协议由David P. Reed在1980年设计且在RFC 768中被规范。典型网络上的众多使用UDP协议的关键应用在一定程度上是相似的。
在TCP/IP模型中,UDP为网络层以上和应用层以下提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据包协议)。UDP在IP数据包的头部仅仅加入了复用和数据校验字段。
UDP适用于不需要或在程序中执行错误检查和纠正的应用,它避免了协议栈中此类处理的开销。对时间有较高要求的应用程序通常使用UDP,因为丢弃数据包比等待或重传导致延迟更可取。
DNS 域名系统
域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53([1])。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
开始时,域名的字符仅限于ASCII字符的一个子集。2008年,ICANN通过一项决议,允许使用其它语言作为互联网顶级域名的字符。使用基于Punycode码的IDNA系统,可以将Unicode字符串映射为有效的DNS字符集。因此,诸如“XXX.中国”、“XXX.台湾”的域名可以在地址栏直接输入并访问,而不需要安装插件。但是,由于英语的广泛使用,使用其他语言字符作为域名会产生多种问题,例如难以输入、难以在国际推广等。
TLS/SSL
传输层安全性协议(英语:Transport Layer Security,缩写:TLS)及其前身安全套接层(英语:Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。网景公司(Netscape)在1994年推出首版网页浏览器-网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布TLS 1.0标准文件(RFC 2246)。随后又公布TLS 1.1(RFC 4346,2006年)、TLS 1.2(RFC 5246,2008年)和TLS 1.3(RFC 8446,2018年)。在浏览器、电子邮件、即时通信、VoIP、网络传真等应用程序中,广泛使用这个协议。许多网站,如Google、Facebook、Wikipedia等也以这个协议来创建安全连线,发送资料。目前已成为互联网上保密通信的工业标准。
SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密匙作为会谈密匙(Session key)。这个会谈密匙是用来将通信两方交换的资料做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。
URI 统一资源标志符
统一资源标志符(英语:Uniform Resource Identifier,缩写:URI)在电脑术语中是用于标志某一互联网资源名称的字符串。
该种标志允许用户对网络中(一般指万维网)的资源通过特定的协议进行交互操作。URI的最常见的形式是统一资源定位符(URL),经常指定为非正式的网址。更罕见的用法是统一资源名称(URN),其目的是通过提供一种途径。用于在特定的名字空间资源的标志,以补充网址。
RPC 远程过程调用
分布式计算中,远程过程调用(英语:Remote Procedure Call,RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。
如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用,例:Java RMI。
RPC是一种进程间通信的模式,程序分布在不同的地址空间里。如果在同一主机里,RPC可以通过不同的虚拟地址空间(即便使用相同的物理地址)进行通讯,而在不同的主机间,则通过不同的物理地址进行交互。许多技术(通常是不兼容)都是基于这种概念而实现的。
RPC一般用于什么地方?
在微服务、分布式已经成为日常的今天,服务通常都部署在不同的服务器,服务器也在不同地区,这时候就存在跨地域跨服务器调用问题,RPC即用于这样类似的情况。
RPC适用于公司内部使用,性能消耗低,传输效率高,服务治理方便,但是不建议传输较大的文本、视频等。
gRPC
gRPC (gRPC Remote Procedure Calls 是Google发起的一个开源远程过程调用(Remote procedure call)系统。该系统基于HTTP/2协议传输,使用Protocol Buffers 作为接口描述语言。
其他功能:
最常见的应用场景是:
- 微服务框架下,多种语言服务之间的高效交互。
- 将手机服务、浏览器连接至后台
- 产生高效的客户端库
Wget
GNU Wget(常简称为Wget)是一个在网络上进行下载的简单而强大的自由软件,其本身也是GNU计划的一部分。它的名字是“World Wide Web”和“Get”的结合,同时也隐含了软件的主要功能。目前它支持通过HTTP、HTTPS,以及FTP这三个最常见的TCP/IP协议协议下载。
cURL
cURL 是一个开源项目,主要的产品是 curl(命令行工具)和 libcurl(C 语言的 API 库),两者功能均是:基于网络协议,对指定 URL 进行网络传输。[3][4]
cURL 涉及是任何网络协议传输,不涉及对具体数据的具体处理。(如:html 的渲染等)
ping
ping(呯)是一种计算机网络工具,用来测试数据包能否透过IP协议到达特定主机。ping的运作原理是向目标主机传出一个ICMP的请求回显数据包,并等待接收回显回应数据包。程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。
在1983年12月,Mike Muuss编写了首个这样的程序,用于在IP网络出现问题时方便探查其根源。因为这个程序的运作原理与潜水艇的主动声纳相似,他便用声纳的声音来为程序取名。David L. Mills曾提出另一个取名:Packet Internet Grouper/Gopher(后者指地鼠)。
网络管理员之间也常将ping用作动词,如“ping一下计算机XXX,看它是否开着。”
HTTP 压缩
HTTP压缩是一种内置到网页服务器和网页客户端中以改进传输速度和带宽利用率的方式。
HTTP数据在从服务器发送前就已压缩:兼容的浏览器将在下载所需的格式前宣告支持何种方法给服务器;不支持压缩方法的浏览器将下载未经压缩的数据。最常见的压缩方案包括brotil、gzip和Deflate,但可用方案的完整列表由IANA维护。此外,第三方可能开发新的方法并纳入到其自身的产品,例如Google的面向HTTP共享字典压缩(SDCH)方案就实现在Google Chrome浏览器和使用在Google的服务器上。
在HTTP中有两种不同的方式可以完成压缩。在较低层级,Transfer-Encoding头可以指示HTTP消息的有效载荷被压缩。在较高层级,Content-Encoding头可以指示一个被转码、缓存或引用的资源已压缩。使用Content-Encoding的压缩比Transfer-Encoding有更广泛的支持,并且某些浏览器不宣告Transfer-Encoding压缩以避免触发服务器的缺陷。
gzip
Gzip是一种压缩文件格式并且也是一个在类 Unix 上的一种文件解压缩的软件,通常指GNU计划的实现,此处的gzip代表GNU zip。也经常用来表示gzip这种文件格式。软件的作者是Jean-loup Gailly和Mark Adler。在1992年10月31日第一次公开发布,版本号0.1,1993年2月,发布了1.0版本。
OpenBSD中所包含的gzip版本实际上是compress程序,其对gzip文件的支持在OpenBSD 3.4中被添加,此处的g代表免费(gratis)。
Secure Shell
Secure Shell(安全外壳协议,简称 SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境[1]。SSH 通过在网络中创建安全隧道来实现 SSH 客户端与服务器之间的连接[2]。SSH 最常见的用途是远程登录系统,人们通常利用 SSH 来传输命令行界面和远程执行命令。SSH 使用频率最高的场合是类 Unix 系统,但是 Windows 操作系统也能有限度地使用 SSH。2015 年,微软宣布将在未来的操作系统中提供原生 SSH 协议支持[3],Windows 10 1803 版本已提供 OpenSSH 工具[4]。
在设计上,SSH 是 Telnet 和非安全 shell 的替代品。Telnet 和 Berkeley rlogin、rsh、rexec 等协议采用明文传输,使用不可靠的密码,容易遭到监听、嗅探和中间人攻击[5]。SSH 旨在保证非安全网络环境(例如互联网)中信息加密完整可靠。
不过,SSH 也被指出有被嗅探甚至解密的漏洞。早在 2011 年,中国的互联网审查机构已经有能力针对 SSH 连线的刺探及干扰。[6][7]而后爱德华·斯诺登泄露的文件也指出,美国国家安全局有时能够把 SSH 协议传输的信息解密出来,从而读出 SSH 会话的传输内容[8]。2017 年 7 月 6 日,非营利组织维基解密确认美国中央情报局已经开发出能够在 Windows 或 Linux 操作系统中窃取 SSH 会话的工具。[9]
FTP 文件传输协议
文件传输协议(英语:File Transfer Protocol,缩写:FTP)是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供([1])。RFC 959 定义了此规范。
FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登录进程。
前端
CommonJS
CommonJS是一个项目,其目标是为JavaScript在网页浏览器之外创建模块约定。创建这个项目的主要原因是当时缺乏普遍可接受形式的JavaScript脚本模块单元,模块在与运行JavaScript脚本的常规网页浏览器所提供的不同的环境下可以重复使用。
ECMAScript
ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会)在标准ECMA-262中定义的脚本语言规范。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,但实际上后两者是ECMA-262标准的实现和扩展。
Ecma 国际
Ecma国际(英语:Ecma International)是一个致力于信息和通讯系统标准化的国际性行业组织。1994年之前,名为欧洲计算机制造商协会(European Computer Manufacturers Association)。因为计算机的国际化,组织的标准牵涉到很多其他国家,因此组织决定改名表明其国际性。现名称已不属于首字母缩略字。
组织在1961年的日内瓦创建为了标准化欧洲的计算机系统。在欧洲制造、销售或开发计算机和电信系统的公司都可以申请成为会员。
W3C 万维网联盟
万维网联盟(英语:World Wide Web Consortium,縮寫W3C),又称W3C理事会,是万维网的主要国际标准组织([2]),为半自治非政府组织(quasi-autonomous nongovernmental organization)。
TC39
所属 Ecma International 的 TC39 是一个由 JavaScript 开发者、实现者、学者等组成的团体,与 JavaScript 社区合作维护和发展 JavaScript 的标准。
我们在 GitHub 上开发 JavaScript(正式名称为 ECMAScript)规范,每两个月开会讨论一次提案。要了解更多关于这个过程的信息,请查看新语言功能提案的五个阶段。请参阅我们的会议议程和会议记录,了解更多信息。
Cookie
HTTP cookie,简称cookie,是在用户浏览网站时由网络服务器创建并由用户的网页浏览器存放在用户计算机或其他设备上的小文本文件。
Cookie使Web服务器能够在用户的设备上存储状态信息(如添加到在线商店购物车中的商品)或跟踪用户的浏览活动(如点击特定按钮、登录或记录历史)([1])。
Session 对谈
在电脑科学领域来说,尤其是在网路领域,对谈(session,Microsoft Windows 中文版译作工作阶段、连线阶段)是一种持久网路协定,在使用者(或使用者代理)端和伺服器端之间建立关联,从而起到交换封包的作用机制,session 在网路协定(例如telnet或FTP)中是非常重要的部分。
在不包含会话层(例如UDP)或者是无法长时间驻留会话层(例如HTTP)的传输协定中,会话的维持需要依靠在传输资料中的进阶别程式。例如,在浏览器和远端主机之间的 HTTP 传输中,HTTP cookie 就会被用来包含一些相关的资讯,例如 session ID,参数和权限资讯等。
CORS 跨域资源共享
跨域资源共享(英语:Cross-origin resource sharing,缩写:CORS),用于让网页的受限资源能够被其他域名的页面访问的一种机制。
通过该机制,页面能够自由地使用不同源(英语:cross-origin)的图片、样式、脚本、iframes以及视频。([2])一些跨域的请求(特别是Ajax)常常会被同源策略(英语:Same-origin policy)所禁止。跨源资源共享定义了一种方式,为的是浏览器和服务器之间能互相确认是否足够安全以至于能使用跨源请求(英语:cross-origin requests)。([3])比起纯粹的同源请求,这将更为自由和功能性的(functionality),但比纯粹的跨源请求更为安全。
跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不同网域传来沙盒脚本的方法,以避开浏览器的同源策略([4])。
JSONP
JSONP(JSON with Padding)是资料格式JSON的一种“使用模式”,可以让网页从别的网域获取资料。另一个解决这个问题的新方法是跨来源资源共享。
由于同源策略,一般来说位于server1.example.com的网页无法与 server2.example.com的服务器沟通,而HTML的 [<script>](<https://zh.wikipedia.org/wiki/HTML%E5%85%83%E7%B4%A0#script_tag>)元素是一个例外。利用 [<script>](<https://zh.wikipedia.org/wiki/HTML%E5%85%83%E7%B4%A0#script_tag>)元素的这个开放策略,网页可以得到从其他来源动态产生的JSON资料,而这种使用模式就是所谓的 JSONP。用JSONP抓到的资料并不是JSON,而是任意的JavaScript,用 JavaScript解释器执行而不是用JSON解析器解析。
同源策略
同源策略是指在Web浏览器中,允许某个网页脚本访问另一个网页的数据,但前提是这两个网页必须有相同的URI、主机名和端口号,一旦两个网站满足上述条件,这两个网站就被认定为具有相同来源。 此策略可防止某个网页上的恶意脚本通过该页面的文档对象模型访问另一网页上的敏感数据。
同源策略对Web应用程序具有特殊意义,因为Web应用程序广泛依赖于HTTP cookie([1])来维持用户会话,所以必须将不相关网站严格分隔,以防止丢失数据泄露。
值得注意的是同源策略仅适用于脚本,这意味着某网站可以通过相应的HTML标签([2])访问不同来源网站上的图像、CSS和动态加载脚本等资源。 而跨站请求伪造就是利用同源策略不适用于HTML标签的缺陷。
XML
可扩展标记语言(英语:Extensible Markup Language,简称:XML)是一种标记语言。XML是从标准通用标记语言(SGML)中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言(XSL)、XBRL和XPath等。
SSG(static site generator)
什么是静态网站生成器?
静态网站生成器是一种基于原始数据和一组模板生成完整静态 HTML 网站的工具。从本质上讲,静态站点生成器自动完成对单个 HTML 页面进行编码的任务,并让这些页面提前准备好为用户提供服务。因为这些 HTML 页面是预先构建的,所以它们可以在用户的浏览器中非常快速地加载。
静态网站生成器是内容管理系统 (CMS) 的替代品,后者是另一种用于管理 Web 内容、生成网页和实施模板的工具。(模板是 Web 内容的可重用格式;开发人员使用模板来避免一遍又一遍地编写相同的格式。)静态站点生成器通常是 JAMstack Web 开发方法的一部分。
什么是静态网站?
静态网站由一个或多个 HTML 网页组成,这些网页每次都以相同的方式加载。静态网站与动态网站形成对比,动态网站根据一些不断变化的数据输入(例如用户的位置、一天中的时间或用户操作)进行不同的加载。静态网页是可以快速加载的简单 HTML 文件,而动态网页需要在浏览器中执行 JavaScript 代码才能呈现。
静态网站生成器和 CMS 之间有什么区别?
在互联网的早期,网站被存储为静态 HTML 站点,所有网页都预先布局和硬编码。这是低效的,因为它需要开发人员手动编码每个网页。
内容管理系统 (CMS) 的出现让开发人员能够避免所有这些手动设置。内容存储在 CMS 数据库中,而不是提前对页面进行编码,当用户请求页面时,服务器会执行以下操作:
- 查询数据库,寻找正确的内容
- 识别该内容将适合的模板
- 生成页面
- 向用户提供页面
CMS 中的内容必须适合 CMS 数据库提供的字段之一,但只要符合要求,它就应该每次都出现在网站上的适当位置。
静态站点生成器是这两种方法的折衷方案。与 CMS 一样,它允许开发人员使用模板并自动生成网页——但它会提前完成后者,而不是响应用户的请求。这可以提高网站性能,因为网页可以立即交付给最终用户。它还为开发人员提供了更大的定制能力,因为他们不受 CMS 提供的数据库字段的限制。
SSR(serve side render)
SSR服务端渲染(英语:server side render)指一般情况下,一个web页面的数据渲染完全由客户端或者浏览器端来完成。先从服务器请求,然后到页面;再通过AJAX请求到页面数据并把相应的数据填充到模板,形成完整的页面来呈现给用户。服务端渲染把数据的初始请求放在了服务端,服务端收到请求后,把数据填充到模板形成完整的页面,由服务端把渲染的完整的页面返回给客户端。这样减少了一次客户端到服务端的HTTP请求,加快了相应速度,一般用于性能优化。
JSON
JSON(JavaScript Object Notation, /ˈdʒeɪsən/)是由道格拉斯·克罗克福特构想和设计的一种轻量级资料交换格式。其内容由属性和值所组成,因此也有易于阅读和处理的优势。JSON是独立于编程语言的资料格式,其不仅是JavaScript的子集,也采用了C语言家族的习惯用法,目前也有许多编程语言都能够将其解析和字符串化,其广泛使用的程度也使其成为通用的资料格式。
格式
WebP
WebP 是一种同时提供了有损压缩与无损压缩(可逆压缩)的图片文件格式。
WebP最初在2010年9月发布,其支持库于2018年4月发布1.0版本。截至2021年5月,已有94%的浏览器支持此格式。
WebP的设计目标是在减少文件大小的同时,达到和JPEG、PNG、GIF格式相同的图片质量,并希望借此能够减少图片档在网络上的发送时间。根据Google较早的测试,WebP的无损压缩比网络上找到的PNG档少了45%的文件大小,即使这些PNG档在使用pngcrush和PNGOUT处理过,WebP还是可以减少28%的文件大小。
WebP支持的像素最大数量是16383x16383。有损压缩的WebP仅支持8-bit的YUV 4:2:0格式。而无损压缩(可逆压缩)的WebP支持VP8L编码与8-bit之RGBA色彩空间。而无论是有损或无损压缩皆支持Alpha透明通道、ICC色彩配置、XMP诠释资料。
WebP有静态与动态两种模式。动态WebP(Animated WebP)支持有损与无损压缩、ICC色彩配置、XMP诠释资料、Alpha透明通道。
PNG
便携式网络图形(英语:Portable Network Graphics,PNG)是一种支持无损压缩的位图图形格式,支持索引、灰度、RGB三种颜色方案以及Alpha通道等特性。PNG的开发目标是改善并取代GIF作为适合网络传输的格式而不需专利许可,所以被广泛应用于互联网及其他方面上。
PNG另一个非正式的名称来源为递归缩写:“PNG is Not GIF”。PNG的官方念法是“平”(/pɪŋ/),但是多数人是当成三个英文字母分开读。
PNG图片大多数都使用PNG作为扩展名,其互联网媒体类型为image/png。[3]PNG于1997年3月作为知识性RFC 2083发布,于2004年作为ISO/IEC标准发布。
GIF
图像互换格式(英语:Graphics Interchange Format,简称GIF)是一种位图图形文件格式,以8位色(即256种颜色)重现真彩色的图像。它实际上是一种压缩文档,采用LZW压缩算法进行编码,有效地减少了图像文件在网络上传输的时间。它是目前万维网广泛应用的网络传输图像格式之一。史蒂芬·威尔海特(Stephen Wilhite)在Compuserve公司工作时,率领工程团队发明GIF档,凭着体积小、成像相对清晰的优点,十分适合早期互联网带宽小的环境,而今网络用户将GIF档用于创作,变成用来作为网络迷因的格式之一,威尔海特也在2013年获得威比奖(The Webby Award)终身成就奖。至于“GIF”怎么念,许多人都念成“gift”([ɡɪf])的音,但他本人正名应该念“Jif”([d͡ʒɪf])一样的音。
JPEG
JPEG或称JPG,是一种针对照片影像而广泛使用的有损压缩标准方法,由联合图像专家小组(英语:Joint Photographic Experts Group)开发。此团队创立于1986年,1992年发布了JPEG的标准而在1994年获得了ISO 10918-1的认定。JPEG与视频音频压缩标准的MPEG(Moving Picture Experts Group)很容易混淆,但两者是不同的组织及标准。
JPEG本身只有描述如何将一个影像转换为字节的数据流(streaming),但并没有说明这些字节如何在任何特定的存储媒体上被封存起来。JPEG的压缩方式通常是有损压缩,即在压缩过程中图像的质量会遭受到可见的破坏,有一种以JPEG为基础的标准Lossless JPEG是采用无损的压缩方式,但Lossless JPEG并没有受到广泛的支持。
一个由C-Cube Microsystems等公司所创建的额外标准,称为JFIF(JPEG File Interchange Format,JPEG文件交换格式,联合图像专家小组文件交换格式)详细说明如何从一个JPEG流,产出一个适合于电脑存储和传输(像是在互联网上)的文件。在普遍的用法,当有人称呼一个"JPEG文件",一般而言他是意指一个JFIF文件,或有时候是一个Exif JPEG文件。然而,也有其他以JPEG为基础的文件格式,像是JNG。
使用JPEG格式压缩的图片文件一般也被称为JPEG Files,最普遍被使用的扩展名格式为.jpg,其他常用的扩展名还包括.JPEG、.jpe、.jfif以及.jif。JPEG格式的资料也能被嵌进其他类型的文件格式中,像是TIFF类型的文件格式。
JPEG/JFIF是万维网上最普遍的被用来存储和传输照片的格式。它并不适合于线条绘图(drawing)和其他文字或图标(iconic)的图形,因为它的压缩方法用在这些类型的图形上,得到的结果并不好(PNG和GIF通常是用来存储这类的图形;GIF每个像素只有8比特,并不很适合于存储彩色照片,PNG可以无损地存储照片,但是文件太大的缺点让它不太适合在网络上传输)。
对于JFIF的MIME媒体类型是image/JPEG(定义于RFC 1341)。
其他
Homebrew
Homebrew是一款自由及开放源代码的软件包管理系统,用以简化macOS系统上的软件安装过程,最初由马克斯·霍威尔(Max Howell)写成。因其可扩展性得到了一致好评[3],而在Ruby on Rails社区广为人知。
Homebrew使用GitHub,通过用户的贡献扩大对软件包的支持。2012年,Homebrew是GitHub上拥有最多新贡献者的项目[4]。2013年,Homebrew同时成为GitHub上最多贡献者及最多已关闭问题的项目。
Base64
Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法。由于
,所以每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。一些如uuencode的其他编码方法,和之后BinHex的版本使用不同的64字符集来代表6个二进制数字,但是不被称为Base64。
Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。
JIT 即时编译
在计算机技术中,即时编译(英语:just-in-time compilation,缩写为JIT;又译及时编译、实时编译,也称为动态翻译或运行时编译,是一种执行计算机代码的方法,这种方法涉及在程序执行过程中(在执行期)而不是在执行之前进行编译。通常,这包括源代码或更常见的字节码到机器码的转换,然后直接执行。实现JIT编译器的系统通常会不断地分析正在执行的代码,并确定代码的某些部分,在这些部分中,编译或重新编译所获得的加速将超过编译该代码的开销。
JIT编译是两种传统的机器代码翻译方法——提前编译(AOT)和解释器——的结合,它结合了两者的优点和缺点。大致来说,JIT编译,以解释器的开销以及编译和链接(解释之外)的开销,结合了编译代码的速度与解释的灵活性。JIT编译是动态编译的一种形式,允许自适应优化,比如动态重编译和特定于微架构的加速——因此,在理论上,JIT编译比静态编译能够产生更快的执行速度。解释和JIT编译特别适合于动态编程语言,因为运行时系统可以处理后期绑定的数据类型并实施安全保证。
Unicode
Unicode,统一码联盟官方中文名称为统一码([1]),是信息技术领域的业界标准。它整理、编码了世界上大部分的文字系统,使得电脑可以用更为简单的方式来呈现和处理文字。
Unicode伴随着通用字符集的标准而发展,同时也以书本的形式([2])对外发表。Unicode至今仍在不断增修,每个新版本都加入更多新的字符。目前最新的版本为2022年9月公布的15.0.0([3]),已经收录超过14万个字符(第十万个字符在2005年获采纳)。Unicode除了视觉上的字形、编码方法、标准的字符编码资料外,还包含了字符特性(如大小写字母)、书写方向、拆分标准等特性的资料库。
Unicode的发展由非营利机构统一码联盟负责,该机构致力于让Unicode方案取代既有的字符编码方案。因为既有的方案往往空间非常有限,亦不适用于多语环境。
Unicode备受认可,并广泛地应用于电脑软件的国际化与本地化过程。有很多新科技,如可扩展置标语言(Extensible Markup Language,简称:XML)、Java编程语言以及现代的操作系统,都采用Unicode编码。Unicode也被ISO作为国际标准采纳于通用字符集,即 ISO/IEC 10646,且Unicode兼容ISO/IEC 10646且完整对应各个版本标准。([4])([5])
UTF-8
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用一至四个字节对Unicode字符集中的所有有效编码点进行编码,属于Unicode标准的一部分,最初由肯·汤普逊和罗布·派克提出。([2])([3])由于较小值的编码点一般使用频率较高,直接使用Unicode编码效率低下,大量浪费内存空间。UTF-8就是为了解决向后兼容ASCII码而设计,Unicode中前128个字符,使用与ASCII码相同的二进制值的单个字节进行编码,而且字面与ASCII码的字面一一对应,这使得原来处理ASCII字符的软件无须或只须做少部分修改,即可继续使用。因此,它逐渐成为电子邮件、网页及其他存储或发送文字优先采用的编码方式。
自2009年以来,UTF-8一直是万维网的最主要的编码形式(对所有,而不仅是Unicode范围内的编码)(并由WHATWG宣布为强制性的“适用于所有事物(for all things)”,([4])截止到2019年11月, 在所有网页中,UTF-8编码应用率高达94.3%(其中一些仅是ASCII编码,因为它是UTF-8的子集),而在排名最高的1000个网页中占96%。([5]) 第二热门的多字节编码方式Shift JIS和GB 2312分别具有0.3%和0.2%的占有率。([6])([7])([1])Internet邮件联盟( Internet Mail Consortium, IMC)建议所有电子邮件程序都能够使用UTF-8展示和创建邮件,([8]) W3C建议UTF-8作为XML文件和HTML文件的默认编码方式。([9])互联网工程工作小组(IETF)要求所有互联网协议都必须支持UTF-8编码([10])。互联网邮件联盟(IMC)建议所有电子邮件软件都支持UTF-8编码。([11])
ASCII
ASCII(发音: /ˈæski/ ASS-kee([1]),American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本延伸美国标准信息交换码则可以部分支持其他西欧语言,并等同于国际标准**ISO/IEC 646**。
美国信息交换标准代码是这套编码系统的传统命名,互联网号码分配局现在更倾向于使用它的新名字US-ASCII([2])。
美国信息交换标准代码是美国电气和电子工程师协会里程碑之一。
ASCII 由电报码发展而来。第一版标准发布于1963年([3])([4]),1967年经历了一次主要修订([5])([6]),最后一次更新则是在1986年,至今为止共定义了128个字符;其中33个字符无法显示(一些终端提供了扩展,使得这些字符可显示为诸如笑脸、扑克牌花式等8-bit符号),且这33个字符多数都已是陈废的控制字符。控制字符的用途主要是用来操控已经处理过的文字。在33个字符之外的是95个可显示的字符。用键盘敲下空白键所产生的空白字符也算1个可显示字符(显示为空白)。
Dos 拒绝服务攻击
拒绝服务攻击(英语:denial-of-service attack,简称 DoS 攻击)亦称洪水攻击,是一种网络攻击手法,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。
当黑客使用网络上两个或以上被攻陷的电脑作为“僵尸”向特定的目标发动“拒绝服务”式攻击时,称为分布式拒绝服务攻击(distributed denial-of-service attack,简称 DDoS 攻击)。据 2014 年统计,被确认为大规模 DDoS 的攻击>已达平均每小时 28 次。[1]DDoS 发起者一般针对重要服务和知名网站进行攻击,如银行、信用卡支付网关、甚至根域名服务器等。
DoS 也常见于部分网络游戏,被心怀不满的玩家或是竞争对手广泛使用。DoS 也常被用于抗议,自由软件基金会创办人理查德·斯托曼曾表示,DoS 是“网络街头抗议”的一种形式。[2]
Docker
Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。([1])
Docker容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。 容器更多的用于表示 软件的一个标准化单元。由于容器的标准化,因此它可以无视基础设施(Infrastructure)的差异,部署到任何一个地方。另外,Docker也为容器提供更强的业界的隔离兼容。([2])
Docker 利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(namespaces),来创建独立的容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机造成的额外负担([3])。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括行程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,
依据行业分析公司“451研究”:“Dockers是有能力打包应用程序及其虚拟容器,可以在任何Linux服务器上执行的依赖性工具,这有助于实现灵活性和便携性,应用程序在任何地方都可以执行,无论是公用云端服务器、私有云端服务器、单机等。” ([3])
k8s Kubernetes
Kubernetes(常简称为K8s)是用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。([3])该系统由Google设计并捐赠给Cloud Native Computing Foundation(今属Linux基金会)来使用。
它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。([4]) 它支持一系列容器工具,包括Docker等。
OSS 对象储存
对象存储(英语:Object storage)是一种计算机数据存储架构,它将数据作为对象进行管理,与其他存储架构不同(如文件系统将数据作为文件层次结构进行管理,而块存储则将数据作为扇区和轨道内的块进行管理)。每个对象通常包括数据本身、数量不等的元数据和一个全局唯一的标识符。对象存储可以在多个层面实现,包括设备层面(对象存储设备)、系统层面和接口层面。在每一种情况下,对象存储都试图实现其他存储架构所不具备的能力,如可由应用程序直接编程的接口,可跨越多个物理硬件实例的命名空间,以及数据管理功能,如数据复制和对象级粒度的数据分发。
对象存储系统允许保留大量的非结构化数据。对象存储的用途包括:在Facebook上存储照片,在Spotify上存储歌曲,或在在线协作服务(如Dropbox)中存储文件。
SaaS 软件即服务
软件即服务(英语:Software as a Service,缩写:SaaS,发音:/sæs/或/sɑs/),亦可称为“按需即用软件”(即“一经要求,即可使用”),它是一种软件交付模式。在这种交付模式中,软件仅需通过网络,不须经过传统的安装步骤即可使用,软件及其相关的数据集中托管于云端服务。用户通常使用精简客户端,一般即经由网页浏览器来访问、访问软件即服务。SaaS 最大的特色在于软件本身并没有被下载到用户的硬盘,而是存储在提供商的云端或者服务器。相较于传统软件需要花钱购买和下载,软件即服务只需要用户租用软件,在线使用,不但大大减少了用户购买风险, 也无需下载软件本身,无设备要求的限制[4]。
对于许多商业应用来说,软件即服务已经成为一种常见的交付模式。这些商业应用包括会计系统[2]、协同软件、客户关系管理、管理信息系统、企业资源计划、开票系统、人力资源管理、内容管理、以及服务台管理[5]。软件即服务已经被吸纳进所有领先的企业级软件公司的战略中[6]。这些公司的最大的卖点之一就是通过将硬件和软件维护及支持外包给软件即服务的提供者,来降低信息技术(Information Technology,简称 IT)成本。
根据一份高德纳集团(Gartner Group,也称顾能集团)的评估[8],软件即服务的销售在 2010 年达到了 100 亿美元,并且曾被预计在 2011 年要达到 121 亿美元,比 2010 年上升 20.7%。高德纳集团估计,到 2015 年,软件即服务的收入将会超过它的 2010 年的收入的 2 倍以上,并且达到预计的 213 亿美元。客户关系管理系统持续成为软件即服务的最大市场。在客户关系管理市场中的软件即服务曾被预测会从 2010 年的 32 亿美元上升到 2011 年的 38 亿美元[9]。
“软件即服务”(SaaS)的术语被认为是云计算的命名法的一部分,还有 IaaS、PaaS、桌面即服务(DaaS)都被认为是云计算的学术名称[10]。
LaaS 基础设施即服务
基础设施即服务(英语:Infrastructure as a Service,简称 IaaS)是提供消费者处理、储存、网络以及各种基础运算资源,以部署与执行操作系统或应用程序等各种软件。
IaaS 是云服务的最底层,主要提供一些基础资源。它与 PaaS 的区别是,用户需要自己控制底层,实现基础设施的使用逻辑。
客户端无须购买服务器、软件等网络设备,即可任意部署和运行处理、存储、网络和其它基本的计算资源,不能控管或控制底层的基础设施,但是可以控制操作系统、储存装置、已部署的应用程序,有时也可以有限度地控制特定的网络元件,像是主机端防火墙。下面这些都属于 IaaS。
- Amazon EC2
- Digital Ocean
- RackSpace Cloud
- OpenStack
PaaS 平台即服务
平台即服务(英语:platform as a service,缩写:PaaS)是一种云计算服务,提供运算平台与解决方案服务。在云计算的典型层级中,PaaS 层介于软件即服务与基础设施即服务之间。
PaaS 提供用户将云端基础设施部署与创建至客户端,或者借此获得使用编程语言、程序库与服务。用户不需要管理与控制云端基础设施(包含网络、服务器、操作系统或存储),但需要控制上层的应用程序部署与应用托管的环境。
PaaS 将软件研发的平台做为一种服务,以软件即服务(SaaS)模式交付给用户。因此,PaaS 也是 SaaS 模式的一种应用。但是,PaaS 的出现可以加快 SaaS 的发展,尤其是加快 SaaS 应用的开发速度。
PaaS 提供软件部署平台(runtime),抽象掉了硬件和操作系统细节,可以无缝地扩展(scaling)。开发者只需要关注自己的业务逻辑,不需要关注底层。下面这些都属于 PaaS。
缓存文件置换机制
电脑存储器空间的大小固定,无法容纳服务器上所有的文件,所以当有新的文件要被置换入缓存时,必须根据一定的原则来取代掉适当的文件。此原则即所谓缓存文件置换机制。
缓存文件置换方法有: