详解Linux配置iSCSI方法
iSCSI技术是在2001年初由IBM及Cisco联合制定的技术,在2003年5月微软在 Windows 2003中 开始自己正式支持iSCSI微软此举很大程度上的推动了iSCSI技术的发展.下面为大家详细介绍iSCSI在Linux上的配制方法简介
一、iSCSI发展路线图
2001年初:由IBM及Cisco于2001年制定iSCSI技术,两家并且分别推出了支持iSCSI的产品—IBMIPStorage200i及CiscoSN5420Router。
2001年12月:NetApp公司推出了自家的IPSAN,它采用的是自行开发的VLD协议(VirtualLocalDisk),存储上属于BlockoverIP方式。
2003年2月:SNIA(StorageNetworkingIndustryAssociate,存储网络工业协会)终于正式制定通过了iSCSI标准。而业界莫不把此标准化视为iSCSI发展历程中的最关键因素,自此开始,有愈来愈多的厂商开始进一步开发合乎业界标准的相关产品,iSCSI也开始受到业界目光的青睐。
2003年5月:微软在WindowsServer2003中,正式开始支持iSCSI,并提供iSCSIInitiator驱动程序的下载。微软此项深具推波助澜的作法,带动了整个iSCSI业界的发展。所以接下来,不论各类作业平台或软硬件的支持会愈来愈齐备。
2004年10月:HP发布的IPStorage500/1500。
2005年:自从标准化及微软支持解决了iSCSI最大的发展瓶颈之后,iSCSI的全面普及也只是时间早晚的问题而已。但业界对其开始普及的时间点一直莫衷一是。一般调查机构多半认为该时间点应在2006年,但各家厂商却异口同声地认为2005年就有机会看到市场大幅起飞。
二、iSCSI技术
SAN(StorageAreaNetwork的缩写)意为存储区域网络,是真正的专注于企业级的存储。SAN采用一个分离的网络(从传统的局域网中分离)连接所有的存储器和服务器,这个网络可以采用高性能的实现技术,如光纤通道(FiberChannel),可以容纳SCSI等协议,使数据块的移动更为有效,也便于用户自由增加磁盘阵列、磁带库或服务器等设备。现在的SAN基本都是通过FibreChannel来实现的,FibreChannel,简称FIBRECHANNEL,又称光纤通道,是利用专用设备进行数据高速传输的一种网络标准,主要用于连接服务器的干线(backbones),并把服务器连接到存储设备上。
采用高速的FIBRECHANNEL作为传输媒介的SAN具有光纤信道在距离、性能和连接性等方面的优势,如果结合光纤通道交换机,则可以提供高达2Gb/s的数据传输速率,使独立于应用服务器网络系统之外的SAN几乎拥有了无限的存储能力。但是利用FIBRECHANNEL实现的SAN虽然性能优越,扩展性极佳,但价格却贵得惊人,管理起来也非常困难,让一般用户难以承受。
也是许多企业不得不忍痛放弃SAN的原因。iSCSI(互联网小型计算机系统接口)是一种在Internet协议网络上,特别是以太网上进行数据块传输的标准,是一种集成了IP和SCSI的技术。它最大的特点就是让标准的SCSI命令能够在TCP/IP网络上的主机系统(启动器)和存储设备(目标)之间传送。与光纤通道相比,iSCSI具有许多优势,用‘iSCSI=低廉+高性能’这个等式来表示再恰当不过了。iSCSI是基于IP协议的技术标准,实现了SCSI和TCP/IP协议的连接,那些以局域网为网络环境的用户只需要少量的投入,就可以方便、快捷地对信息和数据进行交互式传输和管理。相对于以往的网络接入存储,iSCSI的产生解决了开放性、容量、传输速度以及兼容性等许多问题,让用户可以通过现有的TCP/IP网络来构建存储区域网,能够更容易地管理SAN存储。iSCSI结构见图1。
图1iSCSI体系结构
这里就SAN与iSCSI做一比较,基本两者同属运行块协议的SAN架构,只不过前者透过FIBRECHANNEL,后者由IP传输数据罢了,而两者在管理及应用上也大同小异。这里在此还是尽量做一番归纳整理,以供参考,见表-1。
数据传输方式:同为SAN的iSCSI及FIBRECHANNEL都采用块协议方式。
传输速度:就目前的传输速度而言是FIBRECHANNEL(2Gb)最快、iSCSI(1Gb)次之。
管理方式:iSCSI采用IP网络的现有成熟架构。所以可延用既有成熟的网络管理机制,不论是建置、管理或维护上,都非常方便及容易。而FIBRECHANNEL则完全独立于一般网络系统架构,所以需由FIBRECHANNEL供货商分别提供专属管理工具软件。
管理及维护成本:一般来说,FIBRECHANNELSAN多半需要特定的工具软件来操作管理,所以需要对人员进行一定时间的教育训练,而且费用不低。但由于iSCSI乃透过IP网络来传输数据及分配存储资源,所以只要使用网络现有的管理功能即可,相较起来,的确可以省下大笔管理人力及训练成本。
传输距离:原则上,二者都支持长距离的数据传输。FIBRECHANNEL的理论值可达100公里。透过IP网络的iSCSI理论上都没有距离上的限制,iSCSI可以进行长距大量资料的传递。
噪声碰撞问题:由于iSCSI走的是IP网络,其中当然充斥着来自全球各地的庞大数据及噪声,所以碰撞情形也就在所难免了,如此一来,在数据传输的过程中,就很容易导致延迟的情形发生,大大影响了传输的效能,甚至数据的正确性。
三、主流操作系统对iSCSI支持
对于蓄势待发已久的iSCSI而言,迟迟未能全面普及的主要原因之一,就在于各类平台支持性的不够完备。是否能得到各式平台充份支持的关键,则在于协议的标准化上。有了标准化的协议,各类平台解决方案商才能有所依循地推出符合共通标准的支持及产品,如此可观的市场规模才能建立得起来。SNIA协会在2003年2月正式通过了iSCSI标准,虽然iSCSI已正式标准化,但不一定代表从此就能快速普及,iSCSI是否能在企业存储市场站稳脚步,仍需看厂商本身的参与态度及开发意愿。表2是主流操作系统对iSCSI支持情况。
表2是主流操作系统对iSCSI支持
iSCSIInitiator可分为三种,即软件Initiator驱动程序、硬件的TOE(TCPOffloadEngine,TCP卸载引擎)HBA卡及iSCSIHBA卡。就性能而言,软件Initiator驱动程序最差、TOEHBA卡居中、iSCSIHBA卡最佳。但是iSCSIHBA只能运行iSCSI技术协议,而无法运行NFS(NetworkFileSystem,SUN制定)或CIFS(CommonInternetFileSystem,微软制定)等档案系统协议与应用服务器沟通。但Initiator驱动程序及TOEHBA卡则同时支持iSCSI、NFS及CIFS三种协议。
四、Linux下实现iSCSI
Linux网络环境iSCSI技术的实现主要有三种方式:
1.纯软件方式
服务器采用普通以太网卡来进行网络连接,通过运行上层软件来实现iSCSI和TCP/IP协议栈功能层。这种方式由于采用标准网卡,无需额外配置适配器,因此硬件成本最低。但是在这种方式中,服务器在完成自身工作的同时,还要兼顾网络连接,造成主机运行时间加长,系统性能下降。这种方式比较适合于预算较少,并且服务器负担不是很大的用户。目前不论是MicrosoftWindows、IBMAIX、HP-UX、Linux、NovellNetware等各家操作系统,皆已陆续提供这方面的服务,在价格上,比起前两种方案,远为低廉,甚至完全免费。但由于Initiator驱动程序工作时会耗费大量的CPU使用率及系统资源,所以性能最差。在此建议,最好是采用1GHz以上CPU的主机,如此才能获得较佳的效能表现,如果公司主机CPU在1GHz以下,那么最好不要采用。至于在各类协议的支持上,Initiator驱动程序可以同时支持iSCSI、NFS及CIFS协议。当然现在大多数服务器CPU都可以满足这个要求。这里免费的iSCSIInitiator驱动程序,才可以将一般Gigabit网卡仿真成iSCSIInitiator。然后再透过iSCSI桥接器将一般SCSI接口的存储配备仿真成iSCSITarget,如此就形成一个iSCSI-SAN。
2.iSCSITOE网卡实现方式
在这种方式中,服务器采用特定的TOE网卡来连接网络,TCP/IP协议栈功能由智能网卡完成,而iSCSI技术层的功能仍旧由主机来完成。这种方式较前一种方式,部分提高了服务器的性能。在三种iSCSIInitiator中,价格比iSCSIHBA便宜,但比软件Initiator驱动程序贵,性能也居于两者之间。目前市面上Intel的TOE(TCPOffloadEngine,TCP卸载引擎)HBA价格在150美金左右。
3.iSCSIHBA卡实现方式
使用iSCSI存储适配器来完成服务器中的iSCSI层和TCP/IP协议栈功能。这种方式使得服务器CPU无需考虑iSCSI技术以 及网络配置,对服务器而言,iSCSI存储器适配器是一个HBA(存储主机主线适配器)设备,与服务器采用何种操作系统无关。该方式性能最好,但是价格也最为昂贵。在三种iSCSIInitiator中,价格最贵,但性能最佳。目前价格已由一开始的1000美金左右,下降跌至500美元左右。对于有高效能应用需求的企业,最好采用iSCSIHBA卡,如此才能获得最好的性能。
考虑到笔者使用Linux服务器使用2.4GIntel至强处理器,而且网络负载不大,本文使用第一种方式,拓朴结构见图2.
图2网络拓朴结构
说明:iSCSI技术储存设备架构:
型号为PROMISEVtrak15200,使用iSCSI机型;
使用5颗硬盘,1颗为sparedisk,其余4颗做成RAID-5;
IP:iSCSI技术储存设备的IP地址设置为192.168.11.201
连接到储存设备的账号与密码分别为:myaccount/iscsimy1Spw
Linux服务器:
系统:RedHat9Linux核心(2.4.20-8mp)
IP:RedHat9Linux服务器IP地址设置为192.168.10.3
硬件:DellPowerEdge16000SC(2.4GIntel至强处理器,512MBDDRECC内存)基础型服务器。用于邮件服务器(商业版本的sendmail:3Rsoft)。
1.准备工作
因为安装iSCSI驱动需要配合核心来编译,所以会使用到内核源代码,此外,也需要编译器(compiler)的帮助,因此,先确定您的Linux系统当中已经下列软件的存在:kernel-source、kernel、gcc、perl、Apache。打开一个终端,使用命令检查:
#rpm-qa|grepgcc;rpm-qa|grepmake
#rpm-qa|grepkernel;rpm-qa|grepmake
iSCSI驱动程序下载网址是:http://sourceforge.net/project/showfiles.php?group_id=26396
这个网站根据Linux内核(2.4/2.6)提供两种驱动程序,请根据内核版本下载相应的驱动,首先使用下面的命令查询目前所使用的Linux的内核版本:
#uname–a
Linuxcao2.4.20-8#1ThuMar1317:54:28EST2003i686i686i386GNU/Linux
2.得到版本信息后,到其官方网站下载系统所需的驱动。下载完成就可以使用下面的命令安装该组件然后编译内核:
#cdcd/usr/local/src
#wegt http://nchc.dl.sourceforge.net/sourceforge/linux-iscsi/linux-iscsi-3.4.3.2.tgz
#tar-zxvflinux-iscsi-3.4.3.2.tgz
#cdlinux-iscsi-3.4.3.2
#makeclean
#make
#makeinstall
3.修改配置文件开始进行修改的工作:
#vi/etc/iscsi.conf
Username=myaccount#用户名#
Password=iscsimy1Spw#口令#
DiscoveryAddress=192.168.11.201#iSCSI储存设备的IP地址#
Username=myaccount
Password=iscsimy1Spw
4.启动iscs
#/etc/init.d/iscsistart
StartingiSCSI:iscsiiscsidfsck/mount
5.使用iscsi-ls命令可以看到更为详细的磁盘信息::
#iscsi-ls
*****************************************************************
SFNetiSCSIDriverVersion...3.4.3.2(27-Jun-2005)
****************************************************************
TARGETNAME:iqn.1994-12.com.promise.target.3b.31.4.55.1.0.0.20
TARGETALIAS:Vtrak15200
HOSTNO:0
BUSNO:0
TARGETID:0
TARGETADDRESS:192.168.11.201:3260
SESSIONSTATUS:ESTABLISHEDATThuNov1020:13:432005
NO.OFPORTALS:1
PORTALADDRESS1:192.168.11.201:3260,2
SESSIONID:ISID00023d000001TSIH04
****************************************************************
iSCSI节点名称有两种格式,即iqn-type格式和eui-type格式。
Linux常用的是iqn-type的格式为:
6.使用fdisk命令进行磁盘分区
fdisk命令格式
fdisk[-l][-bSSZ][-u]device
主要选项:
-l:察看指定的设备的分区表状况。
-bSSZ:将指定的分区大小输出到标准输出上,单位为区块。
-u:搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址。
device:要这些操作的设备名称。
fdisk是各种Linux发行版本中最常用的分区工具,是被定义为Expert级别的分区工具。我们可以通过fdisk来分区使用iscsi设备。它还包括一个二级选单,首先输入命令,然后出现问答式界面,用户通过在这个界面中输入命令参数来操作fdisk。见图3。
图3 fdisk分区工具
选项介绍:
a:设定硬盘启动区。
b:编辑一个BSD类型分区。
c:编辑一个DOS兼容分区。
d:删除一个分区。
l:察看指定的设备的分区表状况。
m:显示Fdisk命令各个参数的说明。
o:创建一个DOS分区。
n:设定新的硬盘分区。
p:打印分区信息。
s:创建一个空Sun分区表。
t:改变硬盘分区类型。
q:结束分区,不保存操作内容。
v:校验硬盘分区表。
w:结束分区,保存操作内容。
x:进入高级操作模式。
#fdisk/dev/hdd
运行后出现fdiak的命令提示符:
Command(mforhelp):
使用n命令创建一个分区,会出现选择主分区(pprimarypartition)还是扩展分区(llogical)的提示,通常选用主分区。然后按照提示输入分区号(Partionnumber(1-4):)、新分区起始的磁盘块数(FirstCylinder)和分区的大小,可以是以MB为单位的数字(Lastcylindetor+sizaor+sizeMor+sizeK:)。例如:
fdisk/dev/sda
Command(mforhelp):n
Commandaction
eextended
pprimarypartition(1-4)
p
Partitionnumber(1-4):1
Firstcylinder(1-189971,default1):
Usingdefaultvalue1
Lastcylinderor+sizeor+sizeMor+sizeK(1-189971,default189971):
Usingdefaultvalue1899719
Command(mforhelp):w
7.格式化分区:
#mke2fs-text3-c/dev/sda1
8.设定加载点:
#mkdir/cluster/raid
#mount-t ext3/dev/sda1/cluster/raid
经过以上的操作,我的Linux服务器已经连接到iSCSI储存设备,并且如同Linux本机上面的一个SCSI硬盘一样。使用的方式几乎一模一样。
9.自动挂载一个iSCSI卷
可以通过向/etc/fstab.iscsi(filesystemtable)中添加指令行来告诉Linux如何自动挂载卷了。使用vi编辑器修改/etc/fstab,依次使用shift+G命令(将光标定位到最后一行)然后使用o命令(插入新行并且进入编辑状态),输入以下内容:
/dev/sda1/cluster/raidext3defaults00
存盘后从新启动计算机Linux即可自动挂载iSCSI卷。
五、保护iSCSI安全
光纤通道环境给人感觉具有比较高的安全性,原因在于它们是受控的专有网络。iSCSI给人感觉安全性较低,原因在于它是基于以太网的网络。不过从本质上来说,光纤通道是没有安全功能的,而iSCSI提供了非常丰富的安全功能。iSCSI规范提供了initiator与目标端两方面的身份验证(使用CHAP、SRP、Kerberos和SPKM),能够阻止未经授权的访问,只允许那些可信赖的节点进行访问。另外,IPsecDigests(IPsec摘要)和Anti-Reply(防回复)功能阻止了插入、修改和删除操作,而IPsecEncryption(IPsec加密)功能防止被偷听,确保了私密性。
最简单的iSCSI实现方式,就是没有任何加密和认证机制的连接。这种方式仅提供“SCSI指令在TCP/IP协议上传输”这样一个最基本的功能,连接到网络上的任何一台主机都可以毫无阻碍地连接到iSCSI存储设备上。这种方式显然对任何危险都没有防范能力。但是,这种方式也有一个明显的优势,那就是性能。没有了认证和加密,自然也就省去了很多额外的开销。如果您非常需要您的iSCSI磁盘阵列全速工作,这种方式无疑是最好的选择。当然,选择这种方式的时候,用来连接iSCSI磁盘阵列的网络交换机最好是与外界隔离的。
妥善选择口令
口令应避免与个人资料有关系,不要选用诸如身份证号码、出生日期、电话号码等作为密码。建议选用字母、数字混合的方式,以提高密码破解难度。尽量避免在不同的操作系统使用同一密码,否则密码一旦遗失,后果将不堪设想。黑客们经常用一些常用字来破解密码。曾经有一位美国黑客表示,只要用“password”这个字,就可以打开全美多数的计算机。其它常用的单词还有:account、ald、alpha、beta、computer、dead、demo、dollar、games、bod、hello、help、intro、kill、love、no、ok、superuser、system、test、work、yes等。另外相信设置空白口令这件事就会让很多网络管理员头疼。很多用户嫌口令难记,干脆留空,或者随手设成111111之类。这种口令实在令人着急,稍微耐心一点儿的黑客,手工都可以试出来,更何况眼下各种字典攻击程序满天飞。对iSCSI磁盘阵列来说,情况也是一样。如果仅靠用户认证不能解决问题,就需要借鉴传统IP网络的办法,在内网和外网之间架设防火墙,阻击外面那些有充分精力和耐心的“尝试者”。如果iSCSI磁盘阵列(Target)和主机(Initiator)需要跨广域网连接,最好使两者以VPN互连。总之就是一个目的,不让iSCSI磁盘阵列使用公网的IP地址。
总结:至此这里给予Linux网络下中小企业一个低成本的iSCSI的解决方案。
iSCSI小贴士:
1.应该使用硬件initiator还是软件initiator?
iSCSIinitiator是使用硬件还是软件要取决于多种因素,包括预算、性能要求以及服务器工作负荷。软件iSCSIinitiator能够实现成本最低的iSCSI解决方案。纯软件iSCSIinitiator使用标准以太网卡,并依靠主机CPU来处理iSCSI命令和TCP/IP栈。对于具有2GCPU的最新一代服务器来说,大部分客户工作负荷在iSCSI协议处理方面不会引发明显的性能开销。如果您的服务器拥有千兆以太网卡则对软件initiator的评测过程几乎不会有任何问题,原因是在绝大多数流行的操作系统中,initiator都是免费提供的。如果CPU较陈旧,服务器的负荷较重,则可能更适合采用硬件iSCSIinitiator。硬件iSCSIinitiator会将iSCSI和TCP/IP处理工作转移到iSCSIHBA中。其结果就是能够大幅度降低CPU的性能开销,这点堪与光纤通道HBA相比。硬件initiator还能提供软件解决方案所不具备的功能,例如支持高可用性环境的硬件多通道功能,支持密集服务器环境中的远程引导功能。
2.硬件和软件initiator如何影响应用程序的性能?
如果应用程序位于负担较轻的服务器上,在大多数情况下,采用软件initiator的iSCSI的性能开销也不会明显影响应用程序的性能。如果服务器的负荷较重,则必须采用硬件iSCSIinitiator。不过,在大多数环境中,传输带宽以及主机CPU的性能开销完全不是问题—应用程序性能问题在很大程度上要归因于存储的轴数有限(承担工作负荷的磁盘太少)。这不是协议或传输问题。这是直连式存储系统的一个普遍问题,但是采用基于iSCSI的SAN解决方案可以非常方便地解决这一问题。
3.Linux下哪些服务器适合使用iSCSI构架?
目前Linux的擅长应用领域是:单一应用的基础服务器应用,譬如DNS和DHCP服务器、Web服务器、目录服务器、防火墙、文件服务器、打印服务器、互联网连接代理服务器、数据库。其中,数据库服务器及邮件服务器最适合采用iSCSI构架,另外NetApp表示由于ERP数据库系统采用块协议,所以非常适合建置在iSCSI构架上。
详解Linux配置iSCSI方法的更多相关文章
- 详解Linux安装GCC方法
转载自:http://blog.csdn.net/bulljordan23/article/details/7723495/ 下载: http://ftp.gnu.org/gnu/gcc/gcc-4. ...
- 为你详解Linux安装GCC方法
下载: http://ftp.gnu.org/gnu/gcc/gcc-4.5.1/gcc-4.5.1.tar.bz2浏览: http://ftp.gnu.org/gnu/gcc/gcc-4.5.1/查 ...
- 详解Linux安装GCC
为你详解Linux安装GCC方法 2009-12-11 14:05 佚名 博客园 字号:T | T 现在很多程序员都应用GCC,怎样才能更好的应用GCC.本文以在Redhat Linux安装GCC4. ...
- 磁盘分区对齐详解与配置 – Linux篇
在之前一篇<磁盘分区对齐详解与配置 – Windows篇>中,我介绍了磁盘分区对齐的作用和适用于MBR和GPT的两种磁盘类型的配置,以及Windows平台设置磁盘分区对齐的方法. 本文作为 ...
- Linux下ps命令详解 Linux下ps命令的详细使用方法
http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...
- 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路
做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...
- 详解Linux运维工程师
运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火……(相对表示就是 Python 比较火) 之前写过运维 ...
- log4j.properties 详解与配置步骤(转)
找的文章,供参考使用 转自 log4j.properties 详解与配置步骤 一.log4j.properties 的使用详解 1.输出级别的种类 ERROR.WARN.INFO.DEBUGERROR ...
- 详解linux运维工程师入门级必备技能
详解linux运维工程师入门级必备技能 | 浏览:659 | 更新:2013-12-24 23:23 | 标签:linux it自动化运维就是要很方便的运用各种工具进行管理维护,有效的实施服务器保护 ...
随机推荐
- C# winform线程的使用 制作提醒休息小程序(长时间计算机工作者必备)
最近发现日常的工作中,经常因为敲代码而忘记了休息,晚上眼睛特别的累. 并且经常长时间看着显示器,对眼睛一定是不好的,所以今天开发了一个小程序,用于提醒休息. 下面先看看运行效果: 1.程序启动后,后台 ...
- oracle 11g 安装及网络配置
非原创,纯属笔记 安装:基本按照默认下一步安装的 1)可执行安装文件[ setup.exe ]双击安装 2):配置安全更新,取消下面的“我希望通过My Oracle Support接受安全更新(W)” ...
- WPF中窗口控件的跨线程调用
在WinForm中,我们要跨线程访问窗口控件,只需要设置属性CheckForIllegalCrossThreadCalls = false;即可. 在WPF中要麻烦一下,同样的不允许跨线程访问,因为没 ...
- T-SQL切割字符串方法小结 2
有表tb, 如下: id value ----------- ----------- 1 aa,bb 2 aaa,bbb,ccc 欲按id,分拆value列, 分拆后结果如下: id value -- ...
- Oracle 11g 虚拟列 Virtual Column介绍
Oracle 11G 虚拟列 Virtual Column Oracle 11G 在表中引入了虚拟列,虚拟列是一个表达式,在运行时计算,不存储在数据库中,不能更新虚拟列的值. 定义一个虚拟列的语法: ...
- Oracle学习【语句查询】
基本查询语句any和all不能单独使用,必须和比较符一起使用>any 大于最小的例如:select * from emp where sal >any(1000,2000);<any ...
- ScheduleThreadPoolExecutor源码分析
ScheduleThreadPoolExecutor源码分析(一) Java中ScheduleThreadPoolExecutor主要用于执行延迟任务或者按照一定的频率执行任务.其中scheduleA ...
- String,StringBuffer,StringBuilder的简单比较
原文:http://blog.csdn.net/rmn190/article/details/1492013 String 字符串常量StringBuffer 字符串变量(线程安全)StringB ...
- 网站访问架构cdn与负载均衡
曾经见到知乎上有人问“为什么像facebook这类的网站需要上千个工程师维护?”,下面的回答多种多样,但总结起来就是:一个高性能的web系统需 要从无数个角度去考虑他,大到服务器的布局,小到软件中某个 ...
- Island of Survival 概率
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> ...