一。数据库
关系型数据库 V.S. 非关系型数据库
关系型数据库的最大特点就是事务的一致性:传统的关系型数据库读写操作都是事务的,具有ACID的特点,这个特性使得关系型数据库可以用于几乎所有对一致性有要求的系统中,如典型的银行系统。
但是,在网页应用中,尤其是SNS应用中,一致性却不是显得那么重要,用户A看到的内容和用户B看到同一用户C内容更新不一致是可以容忍的,或者 说,两个人看到同一好友的数据更新的时间差那么几秒是可以容忍的,因此,关系型数据库的最大特点在这里已经无用武之地,起码不是那么重要了。
相反地,关系型数据库为了维护一致性所付出的巨大代价就是其读写性能比较差,而像微博、facebook这类SNS的应用,对并发读写能力要求极 高,关系型数据库已经无法应付(在读方面,传统上为了克服关系型数据库缺陷,提高性能,都是增加一级memcache来静态化网页,而在SNS中,变化太 快,memchache已经无能为力了),因此,必须用新的一种数据结构存储来代替关系数据库。
关系数据库的另一个特点就是其具有固定的表结构,因此,其扩展性极差,而在SNS中,系统的升级,功能的增加,往往意味着数据结构巨大变动,这一点关系型数据库也难以应付,需要新的结构化数据存储。
于是,非关系型数据库应运而生,由于不可能用一种数据结构化存储应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。
必须强调的是,数据的持久存储,尤其是海量数据的持久存储,还是需要一种关系数据库这员老将。
[1]关系型数据库
mysql
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
Oracle
Oracle数据库是由甲骨文公司开发,并于1989年正式进入中国市场。虽然当时的Oracle尚名不见经传,通过多年的发展积聚了众多领先性的数据库系统开发经验,在集群技术、高可用性、安全性、系统管理等方面都取得了较好的成绩。Oracle产品除了数据库系统外,还有应用系统、开发工具等。在数据库可操作平台上,Oracle可在所有主流平台上运行,因而可通过运行于较高稳定性的操作系统平台,提高整个数据库系统的稳定性。
SQL Server
SQL Server 是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用。
DB2
DB2是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本。
[2]非关系型数据库
Redis
非关系型数据库
Redis是一个键值存储。此外,它是最著名的键值存储。Redis支持一些c++、PHP、Ruby、Python、Perl、Scala等等。Redis是用C语言编写的。此外,它是根据BSD授权的。
特点:自动故障转移;将其数据库完全保存在内存中;事务;Lua脚本;将数据复制到任意数量的从属服务器;钥匙的寿命有限;LRU驱逐钥匙;支持发布/订阅。
优点:支持多种数据类型;很容易安装;非常快(每秒执行约11万组,每秒执行约81000次);操作都是原子的;多用途工具(在许多用例中使用)。
缺点:不支持连接;存储过程所需的Lua知识;数据集必须很好地适应内存。
MongoDB
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似Json的Bjson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,还支持为数据建立索引。它的特点是高性能、易部署、易使用、存储数据非常方便
NoSQL
NoSQL数据库(非关系型数据库)是用于存储和检索数据的非关系数据库系统。使用NoSQL数据库,我们可以存储和退休的文件,键值,图形为基础的数据容易和更快。我们可以很容易地避免复杂的SQL连接操作。易于使用NoSQL DBs对实际问题(web和企业业务应用程序)进行水平伸缩。
Cassandra
Cassandra是Facebook为收件箱搜索开发的。Cassandra是一个用于处理大量结构化数据的分布式数据存储系统。
特点:线性可伸缩;;保持快速响应时间;支持原子性、一致性、隔离性和耐久性(ACID)等属性;使用Apache Hadoop支持MapReduce;分配数据的最大灵活性;高度可伸缩;点对点架构。
优点:高度可伸缩;无单点故障;Multi-DC复制;与其他基于JVM的应用程序紧密集成;更适合多数据中心部署、冗余、故障转移和灾难恢复。
缺点:对聚合的有限支持;不可预知的性能;不支持特别查询。
二。网络
一. ifconfig命令
ifconfig:查看网络状态(能查看IP地址和子网掩码,但是不能查看网关和DNS地址),还可以临时设置某一网卡的IP地址和子网掩码。
----------------------------------
二. 关闭与启动网卡
ifdown 网卡设备名:禁用该网卡设备。
ifup 网卡设备名:启用该网卡设备。
--------------------------------
三.查询网络状态
netstat 选项(可以用于查看当前计算机开放的端口,从而判断当前计算机启动了哪些服务)
选项:
-t:列出TCP协议端口
-u:列出UPD协议端口
-n:不使用域名和服务名,而使用IP地址和端口号
-l:仅列出在监听状态网络服务
-a:列出所有的网络连接
-r:列出路由列表,功能和route命令一只
常用组合:-tuln、-an、-rn
查看某一状态下的网络连接情况,如:netstat -an | grep ESTABLISHED
查看某一网络状态下的行数(查看有多少台计算机连接到当前服务器),如:netstat -an | grep ESTABLISHED | wc -l
netstat -rn 和 route -n 命令功能一样,结果一致。通过这样的命令查看当前计算机的网关地址。
-----------------------------------
四. route命令
route -n:查看路由列表(可以看到当前计算机的网关)。
route add default gw 192.168.1.1:临时设定网关。
route del default gw 192.168.1.1:删除设定的网关。
-------------------------------
五. 域名解析命令
nslookup [主机名或IP]:进行域名或IP地址的解析。
nslookup
> server
# 查看本机DNS服务器
> exit
# 退出
---------------------------------
六. 网络测试命令
(1) ping 命令
ping [选项] ip或域名:探测指定IP或域名的网络状况。
选项:
-c 次数:指定ping发送包的次数
(2). telnet命令
telnet [域名或IP] [端口]:远程管理与端口探测命令。(telnet的远程连接是极不安全的,它是明文传递数据,并未将数据加密。所以我们并不建议使用telnet命令进行远程管理,但是我们可以通过该命令探测某个计算机中是否开放了某一端口。如:telnet 192.168.0.1 80)
(3). traceroute命令
traceroute [选项] IP或域名:路由跟踪,查看访问某一IP或域名时经过的路由(路由路径)。(该命令可能需要单独安装)
选项:
-n 使用IP而不使用域名显示
(4). wget命令
wget 下载地址:下载命令。
(5). tcpdump命令
tcpdump命令:用于监听某一网卡下某一服务的数据包接收情况(截获数据包-抓包)。如:tcpdump -i eth0 -nnX port 21。
选项:
-i 指定监听的网卡
-nn 将数据包中的域名与服务转为IP和端口显示
-X 以十六进制和ASCII码显示数据包内容
port 指定监听的端口
下面我们逐步介绍几个常用的命令:
1、Ping命令。
当您的机器不能访问Internet,首先确认是否是本地局域网的故障。假定局域网的代理服务器IP地址为202.168.0.1,您可以使用ping 202.168.0.1命令查看本机是否和代理服务器联通。此外可以测试本机的网卡是否正常工作,使用 ping 127.0.0.1命令。一般返回ping的信息就表示本地到该主机的网络线路连通。
2、Tracert
Tracert命令用来显示数据包到达目标主机所经过的路径(路由器),并显示到达每个节点(路由器)的时间。命令功能同Ping类似,但它所获得的信息要比Ping命令详细得多,它把数据包所走的全部路径、节点的IP以及花费的时间都显示出来。该命令比较适用于大型网络。
3、pathping
pathping 命令是一个路由跟踪工具,它将 ping 和 tracert 命令的功能与这两个工具所不提供的其他信息结合起来,综合了二者的功能。pathping会先显示中间的通过的路由器(类似tracert命令得到的信息),然后对每个中间路由器(节点)发送一定数量的ping包,通过统计他们对ping包响应的数据包来分析通信质量。
4、 nslookup
Nslookup命令用于解析域名,一般用来检测本机的DNS设置是否配置正确。
配置ens33:
配置ens33:
[root@localhost ~]# cd /etc/sysconfig/network-scripts/ #网络配置文件路径
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-isdn ifup ifup-plip ifup-tunnel
ifcfg-lo ifdown-post ifup-aliases ifup-plusb ifup-wireless
ifdown ifdown-ppp ifup-bnep ifup-post init.ipv6-global
ifdown-bnep ifdown-routes ifup-eth ifup-ppp network-functions
ifdown-eth ifdown-sit ifup-ib ifup-routes network-functions-ipv6
ifdown-ib ifdown-Team ifup-ippp ifup-sit
ifdown-ippp ifdown-TeamPort ifup-ipv6 ifup-Team
ifdown-ipv6 ifdown-tunnel ifup-isdn ifup-TeamPort
更改ifcfg-ens33(可能名字会有所不同,但基本是这个):
[root@localhost network-scripts]# vim ifcfg-ens33
TYPE=Ethernet #网络类型
BOOTPROTO=none #IP获取方式,有dhcp自动获取和静态IP(none/static)
NAME=ens33 #网络名称
UUID=d1755a41-8026-42f1-871d-9cd78fa2aa3c
DEVICE=ens33 #驱动名称
ONBOOT=yes #设置开机启动
IPADDR=192.168.137.3 #设置静态IP地址
NETMASK=255.255.255.0 #子网掩码
GATEWAY=192.168.137.254 #网关
DNS1=114.114.114.114 #DNS
DNS2=202.96.134.133
保存退出后重启网络服务:
[root@localhost network-scripts]# systemctl restart network.service
至此,网络配置完成。
DNS配置文件
查看DNS配置文件:
vi /etc/resolv.conf
内容如下:
; generated by /sbin/dhclient-script
search localdomain
nameserver 192.168.134.2
其中最重要的是nameserver这一项,设置的是域名服务器的地址,多个域名服务器,则在后续添加空格继续补充域名服务器的地址,或者另起一行做类似的nameserver配置。
三。性能
1.监控cpu使用情况--uptime
该命令将会打印出当前时间 系统运行了多久 当前登陆用户数 系统平均负载
2.监控内存及交换分区的使用情况--free
3.系统磁盘的使用情况-- df
这里我们使用df -h 来人性化的显示容量信息
4.监控网络使用情况--ip 和netstat
ip可以查看网卡的接口信息,在centos中,网卡不在统一命令为ethx,而是会检查主机硬件信息,根据不同 的网卡做出不同的命令,netstat命令可以查看服务器开启的端口信息以及网络的链接状态。
5.打印网络连接 ,路由表,网络接口统计等信息
netstat -t 查看tcp连接
6.监控进程使用情况--ps和top命令
ps
查看当前进程信息(ps在不同版本有不同的语法,这里是centos)
ps -e 查看所有的进程信息
ps -ef 全格式显示进程信息
7.top 动态查看进程信息
top -d 刷新间隔时间,默认3秒
top -p 查看指定进程的pid
8.系统性能分析工具
1.常用系统命令
Vmstat、sar、iostat、netstat、free、ps、top等
2.常用组合方式
vmstat、sar、iostat检测是否是CPU瓶颈
free、vmstat检测是否是内存瓶颈
iostat检测是否是磁盘I/O瓶颈
netstat检测是否是网络带宽瓶颈
四。文件
[1]
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
在 Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:
chown (change ownerp) : 修改所属用户与组。
chmod (change mode) : 修改用户的权限。
[2]
在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组,如:
[root@www /]# ls -l
total 64
dr-xr-xr-x 2 root root 4096 Dec 14 2012 bin
dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot
且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
[3]
实例中,bin 文件的第一个属性用 d 表示。d 在 Linux 中代表该文件是一个目录文件。
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
当为 d 则是目录
当为 - 则是文件;
若是 l 则表示为链接文档(link file);
若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置
1、chgrp:更改文件属组
语法
chgrp [-R] 属组名 文件名
参数选项
-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
2、chown:更改文件属主,也可以同时更改文件属组
语法:
chown [–R] 属主名 文件名
chown [-R] 属主名:属组名 文件名
进入 /root 目录(~)将install.log的拥有者改为bin这个账号:
[root@www ~] cd ~
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log
将install.log的拥有者与群组改回为root:
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log
3、chmod:更改文件9个属性
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。
先复习一下刚刚上面提到的数据:文件的权限字符为: -rwxrwxrwx , 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权限,各权限的分数对照表如下:
r:4
w:2
x:1
五。磁盘
【1】、存储设备的挂载和卸载
fdisk -l 命令
1、作用
查看所有硬盘的分区信息,包括没有挂上的分区和USB设备,挂载时需要用这条命令来查看分区或USB设备的名称,比如挂载U盘时。
注意:Linux中既然硬件是以文件形式存在,则也可以ls -l /dev/sda*查看第一块硬盘的分区信息
df 命令
1、作用
统计磁盘空间或文件系统使用情况,显示磁盘分区上的可使用的磁盘空间,默认显示单位为KB
2、格式
df [option]
3、[option]主要参数
-a或-all:显示全部的文件系统
-h或--human-readable:以可读性较高的方式来显示信息
-T或--print-type:显示文件系统的类型
4、应用举例
查看全部文件系统:
#df -a
du 命令
1、作用
查看文件或目录的磁盘使用的空间,和df命令有一些区别。注意:①du后若不加目录名或文件名,表示只显示当前目录下面的子目录的目录大小和当前目录的总的大小②可查看多个文件或目录用空格符隔开
2、格式
du [option] 目录名或文件名
3、[option]主要参数
-a或-all:显示目录中个别文件的大小
-h或--human-readable:以K,M,G为单位显示,提高信息可读性
-S或--separate-dirs:省略指定目录下的子目录,只显示该目录的总和(注意:该命令是大写S)
4.应用举例
以易读形式查看ahao目录的大小并忽略子目录:
#du -h -S ahao
以易读形式查看haha1文件和haha2文件的大小:
#du -h haha1 haha2
mount 命令
1、作用
①此命令后面不加任何参数表示查看已挂载的所有文件系统
②加参数表示将存储设备挂载到Linux的一个目录下,从而将分区和该目录联系起来,因此我们只要访问这个目录,就相当于访问该存储设备了。
注意:当一个目录之前有文件,设备挂载到这个目录后,目录不显示之前的文件
2、格式
mount [option] 设备名挂载点(必须已存在)
3、[option]主要参数
-t< 文件系统类型>:文件系统类型vfat表示FAT32,iso9660表示光盘或光盘镜像,auto表示系统自动识别(一般选这个方便吧)
4、应用举例
将FAT32文件系统的分区/dev/sda5挂载到/ahao目录下:
#mount -t auto /dev/sda5 /ahao
将U盘/dev/sdb1挂载到/ahao目录下:
#mount -t auto /dev/sdb1 /ahao
将光盘镜像文件xxx.iso的挂接到/peter目录下:
#mount -t iso9660 xxx.iso /peter -o loop
umount 命令
1、作用
卸载已经加载的文件系统。利用设备名或挂载点都能umount文件系统,不过最好还是通过挂载点卸载,当一个设备多个挂载点时容易产生混乱
2、格式
①umount 挂载点 (推荐此方式)
②umount 设备名
3、应用举例
在使用umount命令卸载文件系统时,必须保证文件系统不能处于busy状态,使文件系统处于busy状态的情况有:文件系统中有打开的文件,某个进程的工作目录在此系统中,文件系统的缓存文件正在被使用等。最常见的错误是在挂载点目录下进行卸载操作。
卸载/ahao挂载点对应的挂载:
#umount /ahao
[2]磁盘分区
用fdisk在Linux中进行分区的时候,最常用的参数分别是 d、l、m、n、p、q、t、w等。
注意:
①主分区和扩展分区的磁盘号位1-4,也就是说最多有4个主分区或者扩展分区,逻辑分区开始的磁盘号为5
②如果硬盘上有扩展分区,就只能增加逻辑分区,不能增加扩展分区了
fdisk 命令
1、作用
对硬盘进行分区,采用传统的问答式界面
2、格式
1)fidsk 磁盘名
2)[option]
第一步:fidsk /dev/sdb :选择要进行操作的磁盘,这里是对sdb移动磁盘进行操作
第二步:输入[option]进行操作
3、[option]主要参数
m:列出可以执行的命令(帮助)
p:查看磁盘目前的分区情况
n:建立新的磁盘分区
l:列出已知的分区类型
d:删除现有分区
t:改变分区类型
w;对分区操作进行保存并且退出
q:不保存退出
[3]磁盘格式化
对硬盘分区之后,需要对分区进行格式化才能使用,格式化分区的主要目的是在分区中创建文件系统,文件系统是OS用作明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。
mkfs 命令
1、作用
格式化分区,在分区上创建文件系统
2、格式
①mkfs[options] 设备名
②mkfs.< 文件系统类型> [-v] 设备名
3、[option]主要参数
-t< 文件系统类型>: 选择要创建的文件系统的类型,如ext3、ext4等,不同版本的Linux具有不同的默认文件系统
-V:显示更多输出,包括文件系统的相关信息(注意:-V必须放在-t前面)
4、应用举例
格式化/dev/sdb1分区,并显示具体信息:
#mkfs -V -t vfat /dev/sdb1
#mkfs.vfat -v /dev/sdb1
六。中间件
1.一般本地开发的话,小项目,或者是个人开发建议使用tomcat。
2.linux系统建议使用jetty或apache hpptd
3.大型的项目就用JBOSS或webloigc
4.大项目或者商业项目一般采用:weblgoic/webshere,其他的还有jboss、glasshfish等
5.一些示例项目或者小项目常采用jetty
6.tomcat , jboss, weblogic, websphere 一般项目tomcat就可以了
[1]tomcat
Tomcat 介绍 如今,基于Web的应用越来越多,传统的Html已经满足不了如今的需求。我们需要一个交互式的Web,于是便诞生了各种Web语言。如Asp,Jsp,Php等。当然,这些语言与传统的语言有着密切的联系,如Php基于C和C++语言,Jsp基于Java语言。Tomcat即是一个Jsp和Servlet的运行平台
Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。
[2]ZooKeeper
ZooKeeper 提供基础的目录/名字服务、配置管理服务。并且在此基础上还能提供分布式锁、leader选举等高级功能。网上有一段有趣生动的介绍:“ZooKeeper,顾名思义就是动物园里大象(hadoop)、蜜蜂(Hive)、小猪(Pig)、和我的猫(MyCat)的管理员”。
>客户端建议采用Apache Curator这个二次封装的客户端来进行客户端代码的编写,它封装和简化了很多于业务无关的逻辑,使用简单,质量可靠。
[3]Apache Kafka
Kafka是一个高吞吐量的分布式消息系统,由LinkIn开源,被描述为LinkeIn的“中枢神经系统”。Kafka管理从各个应用程序汇聚到此的信息流,这些数据经过处理后再被分发到何处。