网络服务器架构概述
“Xiao悦然”通过精心收集,向本站投稿了7篇网络服务器架构概述,以下是小编精心整理后的网络服务器架构概述,供大家参考借鉴,希望可以帮助到有需要的朋友。
篇1:网络服务器架构概述
针对校园服务器而言,经过一个学期长时间的运行,服务器中的各种系统已经紊乱,这时恐怕就得重新安装操作系统或应用软件了,以下我们将讲解软件维护过程中所需注意的一些问题。
安装前的准备
在进行操作系统维护之前需要将必要的数据备份出来。备份的方法可以使用额外的硬盘,也可以将数据用刻录机备份出来。另外,在重新安装系统之前,需要检查硬件是否工作正常,从网上下载最新的硬件驱动程序安装盘(光盘或软盘),否则系统很可能将无法安装成功。尤其是某些RAID卡的驱动程序,一定是要有软盘介质的支持,因为在安装操作系统时会要求你插入驱动盘。
操作系统的安装
在确认万事俱备之后,就可以重新安装操作系统了。首先需要将硬盘格式化,用操作系统的启动盘启动系统之后,运行格式化命令就可以了。如果有必要,可以重新把硬盘分区,但是千万不要进行低级格式化硬盘,除非确认硬盘有坏道。
在格式化硬盘之后,就把操作系统安装上,安装操作系统的具体操作过程这里就不再讲了。安装完操作系统之后,再把显卡、网卡、SCSI卡、主板等设备的驱动程序安装上,使操作系统正常运行就可以了。
另外,需要提醒一下,在安装完操作系统之后,记住一定要下载并安装最新的操作系统的补丁,这样就能够保证服务器的安全漏洞是最少的。
网络服务的设置和启动
仅仅安装完操作系统是不行的,此时的服务器还没有提供各种网络服务,因此需要对服务器进行一系列的设置。下面介绍几种特别重要的网络服务。
1、DNS服务
DNS(域名解析系统)是基于TCP/IP的网络中最重要的网络服务之一,最主要的作用是提供主机名到IP地址的解析服务。在Windows Server组成的网络中,DNS服务居于核心地位,如果没有DNS,Windows 2000网络将无法工作。所以在windows 2000网络中,至少要有一台Dns服务器。
2、域控制器
在Windows NT/2000中有“域”的概念。带有“域”的网络能够实现“单一账号单录,普遍资源访问”,也就是说只要在域控制器上有一个合法账号,就可以访问域中其他的服务器的资源。如果没有域控制器,只能构成一个对等网。对等网在权限控制、资源管理上是很麻烦的。因此首先要在网络中安装域控制器;如果网络中已经有了域控制器,可以不必再安装域控制器,但可以将这台服务器设置成备份域控制器,当一台域控制器出故障的时候,另外一台域控制器可以接替它的工作。
3、DHCP服务
DHCP(动态主机配置协议)是服务器向其他客户机提供IP地址以及其他网络服务的IP地址(如DNS、默认网关的IP地址等)的网络服务。数量在几十台以上的计算机网络中,使用DHCP会带来很大的方便,客户机的IP地址、DNS的IP地址、默认网关的IP地址等都可以实现自动分配,这会大大降低网络的管理难度,
除非只有几台计算机,否则都应该采用DHCP。
4、Web服务
Web服务是服务器提供的基本功能,尤其是在校园网中,怎么可能没有校园主页呢?在将校园网主页的数据复制到服务器中之后,需要重新设置一下Web服务,使校园网主页能够正常运转。
应用系统的安装
基本网络服务安装、设置完成之后,需要安装各种服务器应用系统。下面介绍几种必需的应用系统。
1、E-mail服务
E-mail是网络中使用频率最高的网络服务之一,因此E-Mail服务器不可缺。邮件服务器软件有许多,在Windows NT/2000中,用的最多的当然是Exchange Server了;在Linux中,最常用的邮件服务器软件是Sendmail。由于篇幅所限,具体的安装和设置就不讲了。
2、数据库服务
数据库服务也是服务器中经常提供的服务,许多应用系统都在数据库服务器的基础上进行。在Windows NT/2000网络中,最常用的数据库服务系统是MS SQL Server;在Linux中,最常用的数据库服务系统是My SQL。也可以使用Oracle等大型数据库系统。
3、代理服务
目前,许多学校使用代理服务器联入互联网,这样可以节省大量的互联网接入费用。常见的代理服务器软件有SyGate、WinGate、MS Proxy等。有的软件不仅需要在服务器端安装,也需要在客户端安装,因此在安装的时候,要保证客户端与服务器端的一致。
4、其他应用系统
安装了以上这些服务是远远不够的,因为校园服务器上还要运行其他应用系统,比如教育教学资源库、校园管理系统、电子图书馆、电子备课系统等。这些软件的安装各有不同,按照说明书一步一步进行就可以了。
OK,经过以上一系列的步骤,现在焕然一新的服务器又重新出现在您的面前了。相信整装待发的服务器将在下一学期的工作中会有更好的表现。
专家提示
1、安装前的准备
在重新安装操作系统之前,首先要确定是否需要重新安装。如果需要,那么要确定操作系统的版本,数据库、Web服务、邮件服务等应用程序的版本,要确定是否用当前的版本,还是升级。之后,准备操作系统、补丁程序、应用程序,准备驱动程序,最好使用厂家提供的驱动。
备份数据的方法有许多种,在校园网中很实用的办法是网络备份,或者用磁带机备份。备份时,要区分文件系统、数据库,文件系统备份很简单,Copy即可, 数据库备份不能简单地Copy,要用数据库下的备份工具来备份,或者用专用的备份软件来备份,例如Veritas、IBM、CA、NETAPP等公司的备份管理软件。
2、操作系统的安装
如果硬盘以前是安装UNIX,硬盘的分区不是FAT分区,而是VFS、E2FS、E3FS等分区;或者硬盘做过RAID,硬盘的前16K字节会保存RAID的设置信息,这时候为了保证系统安装不会受到干扰,要求清除这些信息。可以用一个小工具来彻底清除系统分区信息,它就是Clear程序,这个小程序能够彻底清除
篇2:ISDNTroubleshooting网络服务器
使用sh isdn status显示ISDN线路状态, ISDN线路共3层状态 第一层处于激活,说明路由器在ISDN线路上检测到2B1Q编码的帧 第二层如显示Multipe_Frame_Established,说明路由器和交换机第一次握手。 sh controller bri 0 这个命令也同样可以看到ISDN线路是否激
使用sh isdn status显示ISDN线路状态。
ISDN线路共3层状态
第一层处于激活,说明路由器在ISDN线路上检测到2B1Q编码的帧
第二层如显示Multipe_Frame_Established,说明路由器和交换机第一次握手。
sh controller bri 0
这个命令也同样可以看到ISDN线路是否激活。
提示信息是Layer 1 internal state is ACTIVATED
无ISDN信号
在没有接通ISDN线路时。
sh isdn status可以看到第一层处于非活跃状态,
Global ISDN Switchtype = basic-net3
ISDN BRI0 interface
dsl 0, interface ISDN Switchtype = basic-net3
Layer 1 Status:
DEACTIVED
Layer 2 调试
debugisdn q921
这条命令使路由器显示自己和ISDN交换机第二层的所有活动。如TEI协商信息和RR。
D信道监控
sh int bri0
查看BRI接口的D信道状态。BRI物理接口是bri0。因此sh int bri0显示的是D信道状态。
R3#sh int bri0
BRI0 is up, line protocol is up (spoofing)
Hardware is BRI
Internet address is 196.1.1.1/24
MTU 1500 bytes, BW 64 Kbit, DLY 20000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation PPP, loopback not set
Last input 00:00:06, output 00:00:06, output hang never
Last clearing of “show interface” counters 00:07:02
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: weighted fair
Output queue: 0/1000/64/0 (size/max total/threshold/drops)
Conversations 0/1/16 (active/max active/max total)
Reserved Conversations 0/0 (allocated/max allocated)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
13 packets input, 95 bytes, 0 no buffer
Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
11 packets output, 75 bytes, 0 underruns
0 output errors, 0 collisions, 2 interface resets
0 output buffer failures, 0 output buffers swapped out
1 carrier transitions
B信道监控
这里就直接举个例子
R3# sh int bri 0:1
BRI0:1 is down, line protocol is down
Hardware is BRI
MTU 1500 bytes, BW 64 Kbit, DLY 20000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation PPP, loopback not set
Keepalive set (10 sec)
LCP Closed, multilink Closed
Closed: IPCP, CDPCP
Last input 00:02:12, output 00:02:12, output hang never
Last clearing of “show interface” counters never
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue :0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
65 packets input, 1754 bytes, 0 no buffer
Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
65 packets output, 1754 bytes, 0 underruns
0 output errors, 0 collisions, 11 interface resets
0 output buffer failures, 0 output buffers swapped out
3 carrier transitions
===========================================
R3# sh int bri 0:2
BRI0:2 is down, line protocol is down
Hardware is BRI
MTU 1500 bytes, BW 64 Kbit, DLY 20000 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation PPP, loopback not set
Keepalive set (10 sec)
LCP Closed, multilink Closed
Closed: IPCP, CDPCP
Last input never, output never, output hang never
Last clearing of “show interface” counters never
Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0
Queueing strategy: fifo
Output queue :0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
0 packets input, 0 bytes, 0 no buffer
Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
0 packets output, 0 bytes, 0 underruns
0 output errors, 0 collisions, 11 interface resets
0 output buffer failures, 0 output buffers swapped out
0 carrier transitions
第三层调试
debug isdn q931
第3层的ISDN流量包含每个B信道的呼叫建立和呼叫挂,
同时可以通过debug ppp auth 查看认证过程。
00:58:26: %ISDN-6-LAYER2UP: Layer 2 for Interface BR0, TEI 65 changed to up
00:58:26: ISDN BR0: TX ->SETUP pd = 8 callref = 0x0A
00:58:26: Bearer Capability i = 0x8890
00:58:26: Channel ID i = 0x83
00:58:26: Called Party Number i = 0x80, '38846302', Plan:Unknown, Type:Unknown
00:58:26: ISDN BR0: RX<- CALL_PROC pd = 8 callref = 0x8A
00:58:26: Channel ID i = 0x89.!!!!!!!!!
00:58:28: ISDN BR0: RX<- CONNECT pd = 8 callref = 0x8A
00:58:28: Date/Time i = 0x020C0C0216
00:58:28: Connected Number i = 0x21833338383436333032
00:58:28: ISDN BR0: TX ->CONNECT_ACK pd = 8 callref = 0x0A
00:58:28: %LINK-3-UPDOWN: Interface BRI0:1, changed state to up
00:58:28: BR0:1 PPP: Treating connection as a callout
00:58:28: BR0:1 CHAP: O CHALLENGE id 8 len 23 from “R3”
00:58:28: BR0:1 CHAP: I CHALLENGE id 6 len 23 from “R5”
00:58:28: BR0:1 CHAP: O RESPONSE id 6 len 23 from “R3”
00:58:28: BR0:1 CHAP: I SUCCESS id 6 len 4
00:58:28: BR0:1 CHAP: I RESPONSE id 8 len 23 from “R5”
00:58:28: BR0:1 CHAP: O SUCCESS id 8 len 4
00:58:28: %LINK-3-UPDOWN: Interface Virtual-Aclearcase/“ target=”_blank“ >ccess1, changed state to up!!!!!!!!!!!!!!!!!!!!!!!
00:58:28: Vi1 PPP: Treating connection as a callout
00:58:29: ISDN BR0: TX ->SETUP pd = 8 callref = 0x0B
00:58:29: Bearer Capability i = 0x8890
00:58:29: Channel ID i = 0x83
00:58:29: Called Party Number i = 0x80, '38846302', Plan:Unknown, Type:Unknown
00:58:29: ISDN BR0: RX<- CALL_PROC pd = 8 callref = 0x8B
00:58:29: Channel ID i = 0x8A
00:58:29: %LINEPROTO-5-UPDOWN: Line protocol on Interface BRI0:1, changed state to up
00:58:29: %LINEPROTO-5-UPDOWN: Line protocol on Interface Virtual-Access1, changed state to up
00:58:29: ISDN BR0: RX<- CONNECT pd = 8 callref = 0x8B
00:58:29: Date/Time i = 0x020C0C0216
00:58:29: Connected Number i = 0x21833338383436333032
00:58:29: ISDN BR0: TX ->CONNECT_ACK pd = 8 callref = 0x0B
00:58:29: %LINK-3-UPDOWN: Interface BRI0:2, changed state to up
00:58:29: %ISDN-6-CONNECT: Interface BRI0:1 is now connected to 38846302 R5!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!
00:58:29: BR0:2 PPP: Treating connection as a callout
00:58:29: BR0:2 CHAP: O CHALLENGE id 4 len 23 from ”R3“
00:58:29: BR0:2 CHAP: I CHALLENGE id 4 len 23 from ”R5“
00:58:29: BR0:2 CHAP: O RESPONSE id 4 len 23 from ”R3“
00:58:29: BR0:2 CHAP: I SUCCESS id 4 len 4
00:58:29: BR0:2 CHAP: I RESPONSE id 4 len 23 from ”R5“
00:58:29: BR0:2 CHAP: O SUCCESS id 4 len 4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
00:58:30: %LINEPROTO-5-UPDOWN: Line protocol on Interface BRI0:2, changed state to
第三层调试 2
show dialer 是第3层连接故障的另一个诊断方法。
show dialer map显示所有动态和静态的拨号映射命令。
R3#sh dialer
BRI0 - dialer type = ISDN
Dial String Successes Failures Last DNIS Last status
38846302 2 0 00:05:39 successful
0 incoming call(s) have been screened.
0 incoming call(s) rejected for callback.
BRI0:1 - dialer type = ISDN
Idle timer (120 secs), Fast idle timer (20 secs)
Wait for carrier (30 secs), Re-enable (15 secs)
Dialer state is idle<
原文转自:www.ltesting.net
篇3:网络服务器安全
很多网管都碰到过这样一些难堪的事,因为服务器的安全漏洞问题,导致其中数据的丢失、权限被非法取得、或者被那些刚刚懂得一点点网络安全知识的菜鸟们指出服务器有这样那样的缺点,被搞得很没面子,其实我也遇到过这样的问题。后来,随着工作中的研究和探讨,逐渐发现这些安全隐患的存在原因以及解决办法。在这里拿出来跟大家探讨一二。网络服务器主要是指那些存放网站数据的WEB服务器、DATA服务器、DNS服务器和MAIL服务器而言。WEB服务器的问题已经说过不少了,在这里就主要谈谈DATA服务器、DNS服务器和MAIL服务器的问题。
一、DATA服务器
先来看看DATA服务器。它主要是存放数据库的服务器(废话)。以SQL数据库为例,从安全角度考虑,SQL服务器与BACKOFFICE组件中的所有程序一样,都是以Windows NT Server为基础,利用了Windows NT Server 自身拥有的安全性能。而且,当你将SQL服务器与Internet 相连时,为保证你数据的安全性和完整性,有些事情你需要特别考虑。
1. 支持SQL服务器的Internet Database Connector(简称IDC)的安全性
在通常情况下,数据库的开发者在使用IDC来处理SQL服务器数据时,就应该考虑对你的数据库实施必要的保护措施。有哪些是必须要做到的呢!根据我的一些经验,以下几点是需要考虑的:
1) 使用NTFS分区。
2) 给予用户执行日常任务所必需的最低等级的访问许可权。
3) 强制执行口令和登录策略。
4) TCP/IP过滤。
5) 防火墙及代理服务器。
通过以上几步措施,你的SQL服务器已经具备初级的安全防范的功能。但是这些是远远不够的,因为高级的网络入侵者往往能够绕过这些防御。那么我们就需要进一步提高服务器的安全性能。用户必须得到访问.IDC和.HTX文件的许可权才能处理数据,如果你赋予匿名访问权,那么IUSR_计算机为匿名访问设定的账户必须拥有访问这些文件的许可权。这里必须提出的是,Windows NT用户名必须严格符合SQL服务器综合性安全命名原则。下划线、美元符号和英镑符号都不允许使用(这意味着不能使用缺省的账户IUSR_计算机名进行SQL服务器访问 )。另外IDC文件对于SQL数据库有效用户口令的保护等措施也是很必要的。
2. IIS本身的安全性问题
这个话题相信很多朋友看了都会感到很熟悉。在这里,我只想讨论一下IIS的SQL Web Assistant的问题。通过使用 SQL Web Assistant 也可以多少地保证你的 Microsoft Exchange 服务器、Internet信息服务器和SQL的安全。一般来讲,只要您正确使用配置好SQL Web Assistant,都能够比较理想地达到SQL数据库的安全保障。
二、DNS服务器
DNS服务器是Internet上其它服务的基础,它处理DNS客户机的请求:将名字与IP地址进行互换,并提供特定主机的其它已公布信息(如MX记录等),
一般而言,网管们碰到的大多会有以下几种情况。
1.名字欺骗。当主机B访问主机A(同时也作为DNS服务器)如执行rlogin时,A接收到这个连接并获得发起本次连接主机B的IP地址。为验证本次连接的合法性,主机A就向本地DNS服务器逆向查询对应于这个IP地址的主机名字。当返回查询结果主机名B为本机所信任的主机时,就允许来自B的远程命令rlogin。下面我们再来看看主机D是如何利用验证漏洞来欺骗主机A的。当主机D也执行rlogin时,主机A同样要验证本次连接的合法性。如果A不能根据D的IP在本地DNS服务器中查询到对应的主机名时,就会向其它DNS服务器发出请求,最后终会找到DNS服务器C。如果入侵者修改DNS服务器C中对应于自己IP地址的主机名为主机B时,主机A就会获得对应于D的IP地址的主机名是B的逆向查询结果,因此主机A认可本次连接。于是欺骗A成功。
2.信息隐藏。当某个企业由于保密等原因的需要,给某些特定主机以特定的内部主机名,而这些主机密码又被入侵者获取时,存放保密数据的服务器主机就会完全暴露。
解决以上两个问题的办法主要有两种:
1.直接利用DNS软件本身具备的安全特性来实现;
2.以防火墙/NAT为基础,并运用私有地址和注册地址的概念。简而言之就是将内部DNS服务器和外部DNS服务器进行物理分开,内部DNS服务器解析私有的IP,而外部DNS则解析公开的IP。内部主机使用私有地址;对Internet服务的主机用NAT完成注册地址到其私有地址的静态映射;访问Internet的主机用NAT完成其私有地址到注册地址的动态映射。
三、MAIL服务器
MAIL服务器一直因其安全性而成为广大网友抱怨的对象。的确,从理论上讲,MAIL服务是一种不安全的服务,因为它必须接受来自INTERNET的几乎所有数据。Internet上,服务器间的邮件交换是通过SMTP协议来完成的。主机的SMTP服务器接收邮件(该邮件可能来自外部主机上的SMTP服务器,也可能来自本机上的用户代理),然后检查邮件地址,以便决定在本机发送还是转发到其它一些主机。Unix系统上的SMTP程序通常是Sendmail。有关Sendmail的安全问题重要的原因在于它是一个异常复杂的程序,而另一个原因是它需root用户特权运行。
解决的方法大致有三种:
1. 使用Unix系统自带的安全特性;
2. 使用代理;
3. 直接修改源码。
以上是对网络服务器安全问题及其解决办法的一些初步探讨。其实,关键的问题还是在于网络管理员对网络安全意识的建立和实施。因为多数网络安全事件的发生,都是因为网络管理员安全意识的缺乏和防范措施实施的不到位。
篇4:Architecture(架构)
架构(Architecture),在计算机硬件中,是提供硬件系统形态和协定、测量和组成这个机制的子系统,或能够组装成这个架构的部件的一个构架或结构,
Architecture(架构)
,
这个架构定义了这些部分怎样彼此相关的,包括约束控制它们是怎样关联的。如果一个系统被分为几个部分和部件,那时有定义这些部分互联或分界彼此的界面。
篇5:CSS架构
Philip Walton 在AppFolio担任前端工程师,他在Santa Barbara on Rails的聚会上提出了CSS架构和一些最佳实践,并且在工作中一直沿用,
擅长CSS的Web开发人员不仅可以从视觉上复制实物原型,还可以用代码进行完美的呈现。无需使用表格、尽可能少的使用图片。如果你是个名副其实的 高手,你可以快速把最新和最伟大的技术应用到你的项目中,比如媒体查询、过渡、滤镜、转换等。虽然这些都是一个真正的CSS高手所具备的,但CSS很少被 人单独拿出来讨论,或者用它去评估某个人的技能。
有趣的是,我们很少这样去评价其他语言。Rails开发人员并不会因为其代码比较规范,就认为他是一名优秀的开发人员。这仅仅是个基准。当然,他的代码得必须规范。另外,还需集合其他方面考虑,比如代码是否可读?是否容易修改或扩展……
这都是些很自然的问题,CSS和它们并没有什么不同之处。今天的Web应用程序要比以往更加庞大。一个缺乏深思熟虑的CSS架构往往会削弱发展,是时候像评估其他语言那样,来评估一下CSS架构了,这些都不应该放在“事后”考虑或者单单属于设计师们的事情。
1.良好的CSS架构目标
在CSS社区,很难提出某个最佳实践已经成为大家的普遍共识。纯粹地从Hacker News的评论上判断和开发者们对CSS Lint发布后的反应来看,大多数人对基本的CSS东西是持反对意见的。所以,并不是为自己的最佳实践奠定一套基本的论据,而应该确定真正的目标。
好的CSS架构目标并不同于开发一个好的应用程序,它必须是可预测、可重用、可维护和可伸缩的。
可预测
可预测意味着可以像预期的那样规范自己的行为。当你添加或者修改某个规则时,它并不会影响到没有指定的部分。对于一个小网站来说,一些微乎其微的改变并不算什么。而对于拥有成千上万个页面的大网站来说,可预测却是必须的。
可重用
CSS规则应具备抽象和解耦性,这样你就可以在现有的基础上快速构建新的组件,无需重新修改编码模式。
可维护
当把新组件放置到网站上,并且执行添加、修改或者重新设计操作时,无需重构现有CSS,并且新添加的X并不会打破原有页面的Y组件。
可扩展
当网站发展到一定规模后,都需要进行维护和扩展。可扩展的CSS意味着网站的CSS架构可以由个人或者团队轻易地管理,无需花费太多的学习成本。
2.常见的错误实践
在实现良好的CSS架构目标之前,我们来看一些常见的错误做法,这对我们达成目标是有好处的。
下面的这些例子虽然都可以很好的执行,但却会给你带来很多烦恼,尽管我们的意图和愿望都是美好的,但是这些开发模式会让你头疼。
几乎在每个网站上,都会有一个特定的虚拟元素看起来与其他页面是完全一样的,然而只有一个页面除外。当面对这样一种情况时,几乎每个新手CSS开发 人员(甚至是经验丰富的)都会以同样的方式来修改。你应该为该页面找出些与众不同之处(或者自己创建),然后再写一个新规则去操作。
基于父组件来修改组件
.widget {
background: yellow;
border: 1px solid black;
color: black;
width: 50%;
}
#sidebar .widget {
width: 200px;
}
body.homepage .widget {
background: white;
}
初看,这绝对是段无害的代码,但让我们来看看它是否达到了我们所设置的目标。
首先,widget在examle是不可预见的。当这些小部件出现在页面两侧或者主页面时,开发人员期望它们以某种特定的方式显示出来,且又不失特色。另外,它也是不可重用或不可扩展的。
另外,它也比较难维护。一旦这个widget需要重新设计,那么你不得不修改其他几个CSS样式。想象一下,如果这段代码是使用其他语言编写的,它 基本就是一个类定义,然后在代码的另一部分使用该类定义并做出扩展。这直接违反了软件开发的开放/闭合(open/close)原则。
过于复杂的选择器
偶尔,会有些文章介绍CSS选择器对整个网站的展示起着非常重要的作用,并且宣称无需使用任何类选择器或者ID选择器。
但伴随着越深入的开发,我越会远离这种复杂的选择器。一个选择器越复杂,与HTML就越耦合。依靠HTML标签和组合器可以保持HTML代码干干净净,但却让CSS更加毛重和凌乱。
#main-nav ul li ul li div { }
#content article h1:first-child { }
#sidebar >div >h3 + p { }
对上面代码进行简单的理解。第一个可能是对下拉菜单进行样式化;第二个想说明文章的主标题应该与其他页面的H1元素不同;最后一个表示在第一段的侧边栏区域添加一些额外的空间。
如果这个HTML是永远不变的,那就无可说之处,但这根本毫不现实。过于复杂的选择器会让人印象深刻,它可以让HTML摆脱掉表面上的复杂,但对于实现良好的CSS架构目标却毫无用处。
上面提到的例子都是不具备可预测性、可重用、可扩展和可维护这四大特性的。例如第一个选择器(下来菜单)例子,如果一个外观非常相似的下拉列表需要 用在不同的页面上,并且#main-nav并不属于内部元素,那么你是否需要重新设计?假设开发者想要修改第三个例子里div里面部分标记,那么整个规则 都会被打破。
过于通用的类名
当创建可重用的设计组件时,在组件的类选择器中覆盖附件的子元素是很常见的现象。例如:
。..
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
In condimentum justo et est dapibus sit amet euismod ligula ornare.
Vivamus elementum accumsan dignissim.
.widget {}
.widget .title {}
.widget .contents {}
.widget .action {}
像.title、.contents、.action这些子元素类选择器可以被安全地进行样式命名,无需担心这些样式会蔓延到拥有相同类名的其他元素中。这是千真万确的。但它并没有阻止相同样式类名称会蔓延到这个组件上。
在一些大型项目上,像.title这样的名称很有可能会被用在另外一个页面或者本身。如果这样的情况发生,那么整个标题部分明显会和预期的不一样。
过于通用的类选择器名称会导致许多不可预测的CSS样式发生。
一个规则做太多事
有时,你要在网站的左上角区域做一个20pixels的可视化组件。
.widget {
position: absolute;
top: 20px;
left: 20px;
background-color: red;
font-size: 1.5em;
text-transform: uppercase;
}
下面,你需要在网站的其他区域使用该组件,那么上面的这个代码明显是错误的,不可重用的。
问题的关键是你让.widget这个选择器做的事情太多,不仅对该组件的位置进行了规定,还对它的外观和感觉方面进行了样式。外观和感觉可以通用,而位置是不可以的。有时候,把它们整合起来使用反而会大打折扣。
虽然这些看起来并无害处,对一些缺乏经验的CSS程序员来说,复制和粘贴已经成为一种习惯。如果一个新团队需要一个特定组件,比 如.infobox,他们会尝试使用这个类选择器。但如果该信息框没有按照期望的那样,在每个需要的地方正确显示出来。这时,你认为他们会怎么做?以我的 经验来看,他们会打破可重用这一规则,相反,他们会简单地把这些代码复制粘贴到每个需要的地方。做些不必要的重复工作。
3.原因
上面列举的这些常规错误实践都有一个相似性,CSS样式承担过多。
对这样的说法你会感到奇怪,毕竟,它是一个样式表,难道不应该承担大多数(如果不是全部)的样式吗?那不正是我们想要的吗?
的确。但是通常来讲,事情并没有那么简单。内容与表现(presentation)相分离是件好事,但CSS从HTML中独立出来并不意味着内容也 需要从表现中分离。换句话说,如果CSS请求深入分析HTML架构,那么从HTML中分拆所有的显示代码并不一定会实现所有的目标。
此外,HTML很少会只包含内容,也表示整体框架。通常,架构是会包含container元素,允许CSS隔离一些固定元素。即使没有表象类(presentational classes),也能混合HTML清晰地把内容展示出来。
我相信,鉴于当前的HTML和CSS状态,把HTML和CSS明智地结合起来,当做表现层是非常需要的。而通过模板和局部模板(partials)也可以把内容层进行分离。
4.解决方案。
如果把HTML和CSS结合起来,作为一个Web应用程序的表现层,那么它们需要采取一些方式更好地促进优秀CSS架构的形成。
最好的方法是CSS中尽可能少的包含HTML架构。CSS则是应该定义元素的视觉效果,无论该视觉元素在哪里。如果有一些特定的组件需要在不同的场 合显示不同的效果,那么应该赋予不同的名称。例如,CSS通过.button类选择器定义了一个按钮组件。如果HTML想要一个特定的元素看起来像按钮, 那么就可以使用.button。如果这里有特殊要求,这里的按钮与其他的有所不同(有可能更大和宽些),那么CSS需要定义一个新的类,HTML可以使用 新的类来赋予该元素新的视觉效果。
CSS赋予元素的外在特征,HTML在页面上进行调用。更少的CSS能被更多的HTML架构调用是最好的。
准确地在HTML中声明元素不仅可以清晰表达设计意图,其他开发者也可以清晰地查看标记并且知道元素将呈现的样子。如果没有这种实践,它很难区分一个元素的外观设置是有意或无意的,这样很容易导致团队混乱。
在标记中填入大量的类(classes)是种常见缺陷,这样做往往需要花费额外的精力。一个CSS样式可以给一个特定组件引用上千次。那么,为了在标记里面进行显示声明,就真的值得去重复编写这样的类吗?
虽然这种担心是有效的,但它可能会产生误导。言下之意就是无论你在CSS中使用一个父选择器还是亲手编写上千个Class,这里都会有些额外的选 择。在Rails或者其他框架里查看同级别抽象很大程度上可以在HTML中保持很好的视觉外观,并且无需在类中一遍又一遍地编写相同的类。
5.最佳实践。
针对上面的种种错误,我进行了很好地总结,并且根据自身经验提出了一些建议,希望它们能帮助您更好地实现良好的CSS架构目标,
专注
确保选择器对一些元素不进行无关样式的最好方法是不给它们机会。例如像#main-nav ul li ul li div这样的选择器可能很容易地应用于不想要的元素上。另一方面,像.subnav这样的选择器就不会给它们任何机会。把类选择器直接应用于你想要的元素 上是最好的方式,并且可以保持元素的可预测性。
/* Grenade */#main-nav ul li ul { }
/* Sniper Rifle */.subnav { }
模块化
一个组织结构良好的组件层可以帮助解决HTML架构与CSS那种松散的耦合性。此外,CSS组件本身应该是模块化的。组件应该知道如何进行样式和更好地工作,但是关于布局、定位以及它们与周围元素的关系不应该做太多的假设。
一般而言,CSS要定义的应该是组件的外观,而不是布局或者位置。同样在使用background、color和font这些属性时也要遵循原则使用。
布局和位置应当由一个单独的布局类或者单独的容器元素构成(请记住,有效地把内容与展示进行分离其实就是把内容与容器进行分离)。
给类进行命名空间
我们已经检查出为什么父选择器不能在封闭和防止交叉样式污染上面发挥100%的功效。而一个更好的解决方案就是在类上应用命名空间。如果一个元素是可视化组件的一员,那么该元素的每个子元素都应该使用基于命名空间的组件。
/* High risk of style. cross-contamination */.widget { }
.widget .title { }
/* Low risk of style. cross-contamination */.widget { }
.widget-title { }
给类进行命名空间可以保持组件独立性和模块化。它可以把现有类冲突降至最小并且减少子元素的一些特殊要求。
创建修饰符类来扩展组件
当一个现有组件需要在一个特定的语境中有所不同时,可以创建一个修饰符类(modifier class)来扩展它。
/* Bad */.widget { }
#sidebar .widget { }
/* Good */.widget { }
.widget-sidebar { }
正如我们看到的,基于父元素的缺点对组件进行修改,需要重申:一个修饰符类可以在任何地方使用。基于位置的覆盖只能被用在一个特定的位置,修饰符类也可以根据需要被多次使用。显然,修饰符类是符合HTML开发者需求的。
把CSS组织成逻辑结构
Jonathan Snook在其非常优秀的
组件是一个独立的视觉元素。模板在另一方面则是构建块。模板很少独自站在自己的角度去描述视觉和感觉,相反,它们是单一的、可重用的模式,可以放在一起形成组件。
为了提供更详细的例子,一个组件可能就是一个模式对话框。该模式可能在头部包含渐变的网站签名、或者在周围会有阴影、在右上角会有关闭按钮、位置固 定在垂直与水平线中间。这四个模式可能被网站重复多次使用,所以在每次使用的时候,你都很少会想到重新编码与设计。这些所有的模板即形成了一个模块组件。
因样式和风格使用类
有过大型网站建设的人可能有个这样的经验,一个拥有类的HTML元素可能完全不知道其用途。你想删除它,但是又犹豫不决,因为它的作用你可能还未意识到。一旦这样的事情一遍又一遍发生的时候,随着时间的推移,项目中将会有越来越多这样的类,只因为团队成员都不敢删除。
在Web前端开发中,类承担了太多的责任,因此才会产生这样的问题。样式化HTML元素、扮演着JavaScript. hook角色、功能检测、自动化测试等。当这么多应用程序在使用类时,让你从HTML中删除它们将会变的非常艰难。
然而,使用一些成熟的约定(惯例)即可完全避免这种问题。当在HTML中看到一个类时,你应该立即明白它的目的。我建议在前面使用前缀,例如用于 JavaScript的在前面加.js,表示Modernizr classes可以在前面加.supports,没有加前缀的即用于表示样式。
这样来发现未使用的类和从HTML中移除它们将会变得非常简单。你甚至可以自动完成这一个过程,在JavaScript中通过交叉引用HTML中的 document.styleSheets对象。如果在document.styleSheets中没有发现该类,即可安全移除。
一般来说,最佳做法是把内容与演示相分离,另外把功能分离开来也同样重要。使用样式类像JavaScript. hook在某种程度上可以加深CSS与JavaScript之间的耦合,但在不打破功能性的前提下很难或者根本不可能更改外观。
有逻辑的命名类
大多数写CSS的人喜欢使用连字符来分隔命名词,但连字符并不足以区分不同类型之间的类。
Nicolas Gallagher最近针对遇到的问题写了一个解决方案,并且取得了巨大的成功(略有改动),为了说明命名约定,可以考虑以下格式:
/* A component */.button-group { }
/* A component modifier (modifying .button) */.button-primary { }
/* A component sub-object (lives within .button) */.button-icon { }
/* Is this a component class or a layout class? */.header { }
从上述类中可以发现其很难正确区分类型规则。这不但会困惑,而且连自动测试CSS和HTML也变的很难。一个结构化的命名约定应该是初看就能够知道其类名与其他类之间的关系,并且知道它出现在HTML中的位置——使命名更加简单和容易测试。
/* Templates Rules (using Sass placeholders) */%template-name
%template-name--modifier-name
%template-name__sub-object
%template-name__sub-object--modifier-name
/* Component Rules */.component-name
.component-name--modifier-name
.component-name__sub-object
.component-name__sub-object--modifier-name
/* Layout Rules */.l-layout-method
.grid
/* State Rules */.is-state-type
/* Non-styled JavaScript. Hooks */.js-action-name
重做第一个例子:
/* A component */.button-group { }
/* A component modifier (modifying .button) */.button--primary { }
/* A component sub-object (lives within .button) */.button__icon { }
/* A layout class */.l-header { }
6.工具
维护一个高效且组织良好的CSS架构是非常困难的,尤其是在大型团队中。下面向大家推荐几款很好的工具来帮你管理网站CSS架构。
CSS Preprocessor
CSS预处理器采用PHP5编写,有预处理器的常见功能,可以帮你快速编写CSS。另外有些号称“功能”的预处理器实际上并不会对CSS架构产生良好作用。下面我提供一个列表,在使用时一定要避免:
● 切勿纯粹为了组织代码来嵌套规则。只有当输出你真正想要的CSS时才可以。
●在无需传递参数的时候切勿使用mixin,不带参数的mixin更适合用作模板,易扩展。
●切勿在选择器上使用@extend,它不是个单一的类。从设计角度来看是毫无意义的,它会膨胀编译过的CSS。
●在运用组件修饰符规则时,切勿使用@extend UI组件,这样会失去基础链。
@extend和%placeholder是预处理器里面非常好的两个功能。它们可以帮你轻松管理CSS抽象并且无需添加bloat和大量的基类到CSS和HTML里,否则将会很难管理。
当你初次使用@extend时,常会与修饰符类一起使用,例如:
.button {
/* button styles */}
/* Bad */.button--primary {
@extend .button;
/* modification styles */}
这样做会让你在HTML中失去继承链。很难使用JavaScript选择所有的按钮实例。
作为一般规则,很少去扩展UI组件或者在知道类型后做些什么。这是区分模板和组件的一种方式,模板无需参与到应用程序的逻辑,并且可以使用预处理器进行安全扩展。
下面是一个引用上面的模式例子:
.modal {
@extend %dialog;
@extend %drop-shadow;
@extend %statically-centered;
/* other modal styles */}
.modal__close {
@extend %dialog__close;
/* other close button styles */}
.modal__header {
@extend %background-gradient;
/* other modal header styles */}
CSS Lint
CSS Lint是由Nicole Sullivan和Nicholas Zakas编写的一款代码质量检测工具,帮助CSS开发人员写出更好的代码。他们的网站上是这样介绍CSS Lint的:
CSS Lint是一个用来帮你找出CSS代码中问题的工具,它可做基本的语法检查以及使用一套预设的规则来检查代码中的问题,规则是可以扩展的。
使用CSS Lint建议:
1.不要在选择器中出现ID。
2.在多部分规则中,不要使用非语义(non-semantic)类型选择器,例如DIV、SPAN等。
3.在一个选择器中使用的连接符(combinator)不要超过2个。
4.任何类名都不要以“js-”开始。
5.如果在非“I-”前缀规则里经常使用布局和定位应给予警告
6.如果一个类定义后被重新定义成子类,也应给予警告。
总结
CSS不仅仅是视觉设计,也不要因为你编写CSS就随便抛出编程的最佳实践。像OOP、DRY、打开/闭合、与内容分离等这些规则应该应用到CSS里面。无论你如何组织代码,都要确保方法真正帮助到你,并且使你的开发更加容易和可维护的。
英文原文:CSS Architecture,编译:CSDN-张红月
篇6:CiscoNAT配置网络服务器
Inside network: 3.3.3.4 (static to 2.2.2.24 outside) 3.3.3.5 (static to 2.2.2.25 outside) | | | 3.3.3.1 (ethernet 0) Router - the_lorax 2.2.2.1 (serial 0) | | | Outside network: 2.2.2.2 Router Configuration version 11.3 service timestamps
Inside network:
3.3.3.4
(static to 2.2.2.24 outside)
3.3.3.5
(static to 2.2.2.25 outside)
|
|
|
3.3.3.1 (ethernet 0)
Router - the_lorax
2.2.2.1 (serial 0)
|
|
|
Outside network:
2.2.2.2
Router Configuration
version 11.3
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname the_lorax
!
enable secret 5 $1$qTEA$EiD5izUJ9cNhgKMjMLAbI/
enable password ww
!
username john password 0 doe
! The timeout here is idle-timeout
username john autocommand aclearcase/” target=“_blank” >ccess-enable host timeout 2
ip nat pool net-208 2.2.2.10 2.2.2.20 netmask 255.255.255.0
ip nat inside source list 1 pool net-208
ip nat inside source static 3.3.3.5 2.2.2.25
ip nat inside source static 3.3.3.4 2.2.2.24
!
!
interface Ethernet0
ip address 3.3.3.1 255.255.255.0
ip nat inside
no mop enabled
!
interface Ethernet1
no ip address
shutdown
!
interface Serial0
ip address 2.2.2.1 255.255.255.0
ip access-group 102 in
ip nat outside
no ip mroute-cache
no fair-queue
clockrate 125000
!
interface Serial1
no ip address
shutdown
!
access-list 1 permit 3.3.3.0 0.0.0.255
access-list 102 permit tcp any host 2.2.2.1 eq telnet log-input
! The timeout here is absolute timeout
access-list 102 dynamic testlist timeout 5 permit ip any host 2.2.2.24 log-input
!
!
line con 0
line aux 0
line vty 0 4
password ww
login local
!
end
原文转自:www.ltesting.net
篇7:管理网络服务器易如反掌
在网络建好后,如何维护好一个庞杂的计算机网络、保障它的正常工作呢?下面介绍一款可以免费下载的网络管理软件SiteView,它可以帮助实现网络的自动化、管理的智能化,
安装及设置SiteView通过模拟网络管理人员的日常操作,可以管理网络中的三部分内容,即:服务器、网络设备(如防火墙、交换机等)和网络应用(如数据库、WWW服务、VOD服务、邮件服务以及电子备课系统等)。
SiteView系统简单明了,易于使用。用户可以到网上下载SiteView的免费版本,并可很快地将SiteView安装在windows 2000环境下。
安装成功后,启动SiteView主界面窗口,在主界面窗口中登录 (初次登录用户名为“admin”,保密字为空)。进入系统后可以对系统进行配置。
添加监测组
首先是添加监测组。监测组的划分可以根据管理的需要来安排,每一个管理组内可以包括各种监测目标(或叫监测器,即Monitor),请见图1。可以给您的监测组起一个好记且有意义的名字,比如“服务器监测组”或“网络交换机监测组”等等。完成命名后“保存”即可,高级选型的内容可以根据使用情况填写,也可以省略不填,请见图2。
图1 监测组和监测器 图2 添加监测组添加监测器如图1所示,监测器(Monitor)的添加可以从30多种监测(服务器、网络设备和应用)中任意选择。SiteView管理员可以从图3的监测器列表中点击选择所需的监测器。
图3 选择添加监测器监测器添加页面列出了监测器的类型和功能,系统的在线帮助也可以解答您在使用中的问题,
例如,添加一个服务器主机的CPU监测器,可以用以下步骤实现:
1、在Monitor列表中选择“CPU”。
2、在 CPU监测的页面中选择索要监测的服务器,并定义监测频率和给出服务器监测目标名。请见图4。
图4 服务器CPU监测器配置举例3、高级选项可供用户选择监测的“执行计划”(是否是7×24小时执行)、报告方式、报警方式。
报警的设置
系统的监测状态分为三种,即正常、警告和错误,分别用绿色、黄色、红色表示。设置报警首先要设置警告的“阈值”。如图5所示,在CPU的监测中可设定,若CPU使用率大于95%为出错,大于80%为“危险”状态即发出警告,80%以下为正常。
图5 报警阈值配置举例打开警报列表,系统管理员可以添加新警报。警报(Alarm)的添加可以根据警告的三个级别(错误、危险、正常)和警告发布的四种方式(E-mail、手机短信、声音、脚本)进行配置,如图6所示。
图6 警告的级别和报警方式通过这样的配置,管理员可以在SiteView的主控制窗口中一目了然地了解网络系统的状态,对网络设备、应用和网络服务器进行全面管理。
图7是SiteView非常直观的主控界面,每一个点代表一个被监测组件,分别用绿色、黄色、红色代表不同组件的正常、警告和错误的运行状态。SiteView还具有监测子组设置、用户管理、超级窗口和远程管理等功能,网络管理员不妨下载免费版本亲自试试。
图7 直观的主控界面【网络服务器架构概述】相关文章:
1.架构面试笔试题目
3.网站架构设计简历
5.滑动轴承概述
6.活动概述
7.创业项目概述
8.网络安全概述
9.年度工作概述






文档为doc格式