分类 大观园 下的文章

本文转载 出处:http://www.cnblogs.com/lujiangping/archive/2016/06/02/5552443.html

安装Dynamics CRM 2016环境配置要求:

系统版本:Windows Server 2012 R2(必须)

SQL 版本: SQLServer2014SP1-FullSlipstream-x64-ENU(必须)

Dynamics CRM 版本:CRM2016-Server-ENU-amd64(必须)

 

安装步骤:

1.在虚拟机安装windows server 2012 r2,安装完后把机器名改成简单好认的(比如SQL2014,CRMServer等),后面安装CRM会用到。

2.在服务管理中安装Active Directory Domain Services(AD DS),安装完后再安装.NET Framework3.5和4.5

4.配置AD DS,在Server manger 顶栏小旗,点击提升为域控制器,新建林,输入域控制器名,如CRM.com,然后一路next,配置完后重启

输入密码,通常为大写字母+小写字母+特殊字符

 点击安装

安装完AD DS,DNS Server和Web server(IIS)后服务器管理器面板

 

5.打开AD域用户和组,新建组织单元OU,如CRM2016, 然后在OU下新增一个User,如crmsvc,user密码改成永不过期

打开AD用户和计算机,Win + R 打开运行,输入dsa.msc,或者直接在开始下拉菜单找到AD用户计算机

新建组织单元

新建用户

输入用户密码,取消用户下次登录必须修改密码,勾选用户密码永不过期

 

5.安装SQL server2014,可以参考:http://www.sqlcoffee.com/SQLServer2014_0005.htm

进入Installation,选择New SQL Server stand-alone installation or add features to an existing installation

输入产品密钥

勾选I accept the license terms 和 Turn on customer Experience选项

下一步

规则检测过程中可能会有警告提示,按提示操作即可,Computer domain controller不用管,Microsoft .Net Application Security是可能没联网,Windows Firewell需要关闭防火墙

操作后

默认第一项,下一步

勾选Database Engine Services

Full-Text and Semantic Extractions for...

Reporting Services

Manager Tools Basic

默认Instance,如果提示Instance已经被使用,可以换个新的name

下一步

点击Add Current user

默认第一个选项,下一步

点击Install,等待安装完成

安装完成

 

6.安装Dynamics CRM,

选择setup server.exe

 

 输入序列号

 勾选I accept license

点击Install,安装预备环境软件,安装完Microsoft .NET Framework后可能需要重启,然后重新点击Setup Server.exe安装

安装完预备环境软件

默认路径下一步

默认下一步

输入SQL server安装的计算机名称(第一步提到的)

选择browse,选中第一步安装AD后创建的AD OU

Account Name为:域名 + AD的OU中创建的用户名,Password是OU中的用户名的密码

默认下一步

不填,默认下一步

Display name一般为: CompanyName简称 + Productname

默认下一步

 选第二项I dont want to user Microsoft update

检测过程中会有一些错误,如果是Performance 原因,需要把crmsvc账号加到performance log里面去

打开AD 用户和计算机,选中Builtin,找到Performance log users

输入crmsvc,点击检查名称,点击确定

退回上一步,重新检测一下

下一步

点击Install

安装到CRM Tools时会很慢,尤其内存小于2G的时候,如果是在虚拟机上安装,内存一定要大于2G。耐心等待漫长的安装时间后,安装完成。

(安装过程中不要强行关闭安装程序,会导致OU配置失败,退出重新修复也无效。)

 安装完成后:

 安装完自动安装CRM Reporting Extensions Setup,如果没有自动运行,到CRM安装包下,打开SrsDataConnector文件夹,运行SetupSrsDataConnector.exe,选择Do not get updates

勾选I accpet this license agreement

默认下一步

默认下一步

勾选I dont want to user Microsoft update

默认下一步 

在系统环境检测时可能会遇到The SQL Server Reporting Services account is a local user and is not supported的错误提示,

需要打开SQL Server 2014 Reporting services Configuration manager

默认账号登陆

在Service Account中,选择Local System

选择文件存放位置,输入密码,密码自定义

默认OK

完成后状态

重新运行SetupSrsDataConnector.exe,检测通过

默认下一步

点击Install

安装完成

打开Deployment Manager

选中Organizations,右键crmserver,选择browse,在弹出的浏览器中输入用户名密码,用户名和密码为域登陆的用户名和密码,进入CRM成功。全部CRM安装配置完成。

好文要顶 关注我 收藏该文  


这里介绍一下如何用虚拟机构建一台服务器,我是用的VMware,用VirtualBox基本也差不多,除了端口映射那里不太一样。因为每次学新东西配置实验环境都是个麻烦事(其实也没那么麻烦),主要是当自己的电脑装了一堆环境,一堆IDE后,总会变得臃肿不堪,而且经常遇到莫名其妙的问题,解决麻烦,还容易造成系统的不稳定。而且每换一台电脑,所有的东西需要重新配置。

所以我一直在想有一台专属的实验服务器就好了(可是对于学生来说还是贵啊),我可以在上面装我的专属实验环境,并且不用担心污染我的本地电脑,而且重装系统,或者在不同电脑上也能快速的恢复实验环境!

所以我就想能不能用虚拟机做一台专属的实验服务器,后来发现是可行的,并且装了server版的虚拟机基本不怎么吃资源。

安装VMware虚拟机

首先安装一个虚拟机,这里网上大量教材就不提供了,可以看看Linux公社的的相关位置,这里我是用的Ubuntu-server,注意安装的时候,最后选择安装包的时候,把openssh带上。或者安装完后通过命令安装

sudo apt-get install openssh-server

安装完通过查看,如果有sshd说明安装成功

your text

配置网络

这里我采用的NAT模式,该模式的好处是不用管外界ip地址的变化(比如说办公环境经常变换,ip地址也经常变换),内部ip部会改变,这样可以免去频繁修改host文件的烦恼。

我这里使用的vmware,把22号端口暴露出去(可以在公网中访问)

编辑-虚拟网络编辑器

your text

点击【NAT设置】- 【添加】,这里输入端口号22,然后虚拟机的ip地址(进入虚拟机通过ipconfig获得),我这里是192.168.91.133

your text

your text

填完之后确定,我们虚拟机就配置完了

VirtualBOX

对于Virtualbox来说其实更简单,直接点击端口转发就行了

your text

your text

配置host

这里,为了访问虚拟机方便,或者避免虚拟机ip地址变化导致程序需要做大量修改配置文件。

我们可以直接在host中做一个映射。一般在C:\Windows\System32\drivers\etc目录下,用记事本,gvim等可以打开。增加一行是虚拟机的ip地址。

your text

配置xshell

xshell是windows端功能强大的ssh终端软件,可以免费使用。

Xshell实现Windows上传文件到Linux主机  http://www.linuxidc.com/Linux/2015-05/117975.htm

Xshell 登录 CentOS 6.3 中文乱码的解决 http://www.linuxidc.com/Linux/2013-06/86600.htm

VirtualBox4.12文本安装CentOS 5.4以及Xshell连接教程 PDF http://www.linuxidc.com/Linux/2013-06/85575.htm

Xshell连接CentOS6.5 iptables或ls 输出乱码 http://www.linuxidc.com/Linux/2014-06/103725.htm

VMware Linux使用Xshell登陆 http://www.linuxidc.com/Linux/2012-06/62546.htm

使用Xshell密钥认证机制远程登录Linux http://www.linuxidc.com/Linux/2015-03/114947.htm

当然你也可以使用(Putty、SecureCRT)根据自己的需要

输入主机的ip地址:

your text

然后可以修改一下外观,改变一下字体什么的,然后按确定,再在弹出的对话框点【连接】

your text

会让你输入用户名和密码, 你可以选择记住密码

your text

your text

然后就可以连接上了

your text

我们测试一下通过输入本地主机的ip地址:

your text

your text

发现也是能连接上的,说明端口被暴露出来了

服务器后台运行

是不是每次都要打开电脑,然后留一个VM程序在任务栏惹人厌呢?当然不是,我们可以让它后台运行。接下来,我们可以把我们的虚拟机(服务器)后台运行了

your text

编辑——首选项,选中关闭后保持虚拟机运行

your text

光这样还不够,还要在服务中把VMware Authorization Service打开,就可以把虚拟机后台运行了。

VMware Authorization Service打开,就可以把虚拟机后台运行了。

your text

在vmware把虚拟机打开时候,关闭就行了,然后它就跑后台运行了,我们就可以随时通过远程工具比如(xshell)访问了

your text

可以发现服务器开了在后台基本不怎么耗费资源,可能也是server版本的原因,这样就可以放心的在后台开启服务器了。

your text

有人问为什么不直接在虚拟机中运行指令,而非要弄一个xshell远程登录,这个嘛,主要是~装逼~,当然不是拉,一来,我xshell软件可以显示风格,二来和真实工作情况相似,三来xshell提供了很多功能,加上配合xftp传输文件,非常方便。

配置环境

我这里主要使用node,所以安装了一些node开发工具(node npm MongoDB Redis……)

sublime sftp连接到服务器

在sublime中,通过sftp插件可以快速的把工程同步到服务器上,简直不要太方便

安装也很简单:

ctrl + shift + p

install

sftp

使用的时候,对需要同步的目录或文件,点击右键【SFTP】,配置一下,主要是下面几个地方要配置一下,把upload_on_save

打开可以在每次保存的时候,自动同步(根据需要开关),然后配置一下host,用户名,密码,端口号,还有同步到的目录(事先创建)

your text

然后我们保存,点击右键——【SFTP】——Upload File

your text

然后我们通过xshell打开服务器,可以看到正常同步过来了

your text

然后,只要我们代码修改保存,这里就会自动同步更新

我们写了一小程序,在服务器的8011端口跑

var http = require('http')

http.createServer(function  (req,res) {
    // body... 
    res.end('hello');
}).listen(8011);

console.log('listen 8011');

我们在服务器端运行一下:

your text

然后我们在本地跑一下:输入http://myserver:8011(还记得我们之前配置了hosts文件吗),可以看到程序正常运行了。

your text

最后

然后,你就可以在服务器上做任何你想做的事情了,而且配置好的环境,你可以压缩包保存一份,然后上传到百度云上(我装完环境的才2g,压缩完700m),以后不管在什么地方,只要装上虚拟机,所有环境就有了,不要重新配置,方便吧!

你还可以多配几个不同的实验环境,而不用担心污染你的本地电脑。而且Linux的bash在实际工作中效率要比Windows好很多,把它作为真实的实验环境是比较合适的。

本文永久更新链接地址http://www.linuxidc.com/Linux/2017-01/139530.htm


linux系统下查看svn服务是否启动,重启及设置开机重启

Linux系统中svn服务是否启动,重启及设置开机启动

 

安装完svn服务器后虽然好用但是因为经常重启Linux服务器,每次重启完就要去手动启动svn服务器,很是麻烦,于是在网上找了一些方法后,自己把svn服务器设置成开机启动

步骤一:安装svn服务器:

1. 安装SVN服务器:

检查是否已安装

# rpm -qa subversion

安装SVN服务器

# yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql

验证安装

# cd /etc/httpd/modules
# ls | grep svn
mod_authz_svn.so
mod_dav_svn.so

查看版本

# svnserve --version

 

 

 

2. 代码库创建:

安装完成后要建立SVN库

# mkdir -p /opt/svn/repositories
# svnadmin create /opt/svn/repositories

执行后,自动建立repositories库,查看/opt/svn/repositories文件夹包含了conf,db,format,hooks,locks,README.txt等文件,说明一个SVN库已经建立。

 

 

 

 

3. 配置版本库:

进入上面conf文件夹下,进行配置:

a. 用户密码passwd配置:

# vi + passwd  //+表示光标放在文件最低端

修改passwd为一下内容:

[users]
# harry = harryssecret
# sally = sallyssecret
zhoulf=123456

 

b. 权限控制authz配置:

# vi + authz

设置哪些用户可以访问哪些目录,向authz文件追加以下内容:

[/]
zhoulf=rw  //给该用户访问所有库的权限  或 [repositories:/project]  //repository库的根目录权限 zhoulf=rw

/ 表示根目录及以下,根目录是svnserve启动时指定的,我们指定的是/opt/svn;/ 就是指对全部版本库都具有权限

repositories:/ 表示对库repositories的根目录设置权限

PS:

* 权限配置文件中出现的用户名必须已在用户配置文件中定义。

* 对权限配置文件的修改立即生效,不必重启svn。

 

c. 服务svnserve.con配置:

# vi + svnserve.conf

添加一下内容:

[general]
#匿名访问的权限,可以是read,write,none,默认为read
anon-access=none
#使授权用户有写权限
auth-access=write
#密码数据库的路径
password-db=passwd
#访问控制文件
authz-db=authz
#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
realm=/opt/svn/repositories

这里注意各标签不能错,也不能有重复,不然无法连接。

 

d. 配置防火墙端口(如果需要):

不一定每个人都需要设置,可以先测试后再看是否需要打开端口

# vi /etc/sysconfig/iptables

添加一下内容:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT

保存后重启防火墙

# service iptables restart

 

4. 查看:

a. 启动SVN

# svnserve -d -r /opt/svn/repositories(你的svn所在目录)

 

b. 查看SVN进程

# ps -ef|grep svn|grep -v grep
root 12538 1 0 14:40 ? 00:00:00 svnserve -d -r /opt/svn/repositories

 

c. 检测SVN端口

# netstat -ln |grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN

 

 

5. 停止重启SVN:

# killall svnserve //停止
# svnserve -d -r /opt/svn/repositories // 启动

 

6. 测试连接:

(1)  在本地电脑上安装TortoiseSVN客户端:

        成功安装TortoiseSVN后在电脑桌面右键有TortoiseSVN提示;选择Repo-browser;会出现一个地址栏;

(2)在地址栏输入:svn://+服务器IP地址;如果安装没问题的话就会进入服务器的资源库

 

二、Linux服务器端设置svn开机启动

(1)在Linux服务器跟目录((/root路径下))创建一个脚本文件

     #  touch svn.sh

(2) 进入脚本文件

      # vim svn.sh

(3)添加一下内容

    #!/bin/bash
    /usr/bin/svnserve -d -r  /opt/svn/repositories

    解释一下:

               这里的svnserve路径保险起见,最好写绝对路径,因为启动的时候,环境变量也许没加载。
绝对路径怎么查?

      # which svnserve

(4)改该脚本的执行权限

    # chmod 777 svn.sh

(5)加入自动运行

     # vi /etc/rc.d/rc.local
在末尾添加脚本的路径:
       /root/svn.sh

(6)重启Linux服务器,重启后查看svn服务器是否已经开启

        #  ps -ef|grep svnserve

     如果显示以下信息表示svn已经开启了:

       tcp        0      0 0.0.0.0:3690            0.0.0.0:*               LISTEN


互联网架构“高并发”

 

一、什么是高并发

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求


高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPSQuery Per Second),并发用户数等。


响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。

吞吐量:单位时间内处理的请求数量。

QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。

并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。

 

二、如何提升系统的并发能力

互联网分布式架构设计,提高系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out

垂直扩展:提升单机处理能力。垂直扩展的方式又有两种:

1)增强单机硬件性能,例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G

2)提升单机架构性能,例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间;


在互联网业务发展非常迅猛的早期,如果预算不是问题,强烈建议使用“增强单机硬件性能”的方式提升系统并发能力,因为这个阶段,公司的战略往往是发展业务抢时间,而“增强单机硬件性能”往往是最快的方法。

 

不管是提升单机硬件性能,还是提升单机架构性能,都有一个致命的不足:单机性能总是有极限的。所以互联网分布式架构设计高并发终极解决方案还是水平扩展


水平扩展:只要增加服务器数量,就能线性扩充系统性能。水平扩展对系统架构设计是有要求的,如何在架构各层进行可水平扩展的设计,以及互联网公司架构各层常见的水平扩展实践,是本文重点讨论的内容。

 

三、常见的互联网分层架构


常见互联网分布式架构如上,分为:

1客户端层:典型调用方是浏览器browser或者手机应用APP

2反向代理层:系统入口,反向代理

3站点应用层:实现核心应用逻辑,返回html或者json

4服务层:如果实现了服务化,就有这一层

5数据-缓存层:缓存加速访问存储

6数据-数据库层:数据库固化数据存储

整个系统各层次的水平扩展,又分别是如何实施的呢?

 

四、分层水平扩展架构实践

反向代理层的水平扩展


反向代理层的水平扩展,是通过“DNS轮询”实现的:dns-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问dns-server,会轮询返回这些ip

nginx成为瓶颈的时候,只要增加服务器数量,新增nginx服务的部署,增加一个外网ip,就能扩展反向代理层的性能,做到理论上的无限高并发。

 

站点层的水平扩展


站点层的水平扩展,是通过“nginx”实现的。通过修改nginx.conf,可以设置多个web后端。

web后端成为瓶颈的时候,只要增加服务器数量,新增web服务的部署,在nginx配置中配置上新的web后端,就能扩展站点层的性能,做到理论上的无限高并发。

 

服务层的水平扩展


服务层的水平扩展,是通过“服务连接池”实现的。

站点层通过RPC-client调用下游的服务层RPC-server时,RPC-client中的连接池会建立与下游服务多个连接,当服务成为瓶颈的时候,只要增加服务器数量,新增服务部署,在RPC-client处建立新的下游服务连接,就能扩展服务层性能,做到理论上的无限高并发。如果需要优雅的进行服务层自动扩容,这里可能需要配置中心里服务自动发现功能的支持。

 

数据层的水平扩展

在数据量很大的情况下,数据层(缓存,数据库)涉及数据的水平扩展,将原本存储在一台服务器上的数据(缓存,数据库)水平拆分到不同服务器上去,以达到扩充系统性能的目的。

 

互联网数据层常见的水平拆分方式有这么几种,以数据库为例:

按照范围水平拆分


每一个数据服务,存储一定范围的数据,上图为例:

user0库,存储uid范围1-1kw

user1库,存储uid范围1kw-2kw

这个方案的好处是:

1)规则简单,service只需判断一下uid范围就能路由到对应的存储服务;

2)数据均衡性较好;

3)比较容易扩展,可以随时加一个uid[2kw,3kw]的数据服务;

不足是:

(1)      请求的负载不一定均衡,一般来说,新注册的用户会比老用户更活跃,大range的服务请求压力会更大;

 

按照哈希水平拆分


每一个数据库,存储某个keyhash后的部分数据,上图为例:

user0库,存储偶数uid数据

user1库,存储奇数uid数据

这个方案的好处是:

1)规则简单,service只需对uid进行hash能路由到对应的存储服务;

2)数据均衡性较好;

3)请求均匀性较好;

不足是:

1)不容易扩展,扩展一个数据服务,hash方法改变时候,可能需要进行数据迁移;

 

这里需要注意的是,通过水平拆分来扩充系统性能,与主从同步读写分离来扩充数据库性能的方式有本质的不同。

通过水平拆分扩展数据库性能:

1)每个服务器上存储的数据量是总量的1/n,所以单机的性能也会有提升;

2n个服务器上的数据没有交集,那个服务器上数据的并集是数据的全集;

3)数据水平拆分到了n个服务器上,理论上读性能扩充了n倍,写性能也扩充了n倍(其实远不止n倍,因为单机的数据量变为了原来的1/n);

通过主从同步读写分离扩展数据库性能:

1)每个服务器上存储的数据量是和总量相同;

2n个服务器上的数据都一样,都是全集;

3)理论上读性能扩充了n倍,写仍然是单点,写性能不变;

 

缓存层的水平拆分和数据库层的水平拆分类似,也是以范围拆分和哈希拆分的方式居多,就不再展开。

 

五、总结

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求

提高系统并发能力的方式,方法论上主要有两种:垂直扩展(Scale Up)与水平扩展(Scale Out)。前者垂直扩展可以通过提升单机硬件性能,或者提升单机架构性能,来提高并发性,但单机性能总是有极限的,互联网分布式架构设计高并发终极解决方案还是后者:水平扩展

互联网分层架构中,各层次水平扩展的实践又有所不同:

1)反向代理层可以通过“DNS轮询”的方式来进行水平扩展;

2)站点层可以通过nginx来进行水平扩展;

3)服务层可以通过服务连接池来进行水平扩展;

4)数据库可以按照数据范围,或者数据哈希的方式来进行水平扩展;

各层实施水平扩展后,能够通过增加服务器数量的方式来提升系统的性能,做到理论上的性能无限。


设计自己的高并发架构


在互联网行业,未来的趋势就是高并发分布式系统。

作为一名互联网开发人员,一定要把握发展趋势,并沿着正确的路线提升自己。我也是刚刚开始了解什么是高并发、分布式的系统,怎样进行这种系统的架构设计。我觉得学习的思路应该是:根据了解到的内容,参考已经存在的方案,自己思考,并动手设计一套自己的系统架构,哪怕十分简陋,但一定要了解每一部分设计或者优化的目的、原则、思路、具体方法和使用到的技术,然后再一步步完善其中的每一部分,不断加入最新的方案和技术,并在实际开发中不断实践自己的方案,最终形成自己最优的架构设计。

下面是我参考了很多架构设计方案后总结出的系统优化策略。

搭建高并发系统,或针对系统进行高并发优化,需要明确系统高并发出现的时间规律,地域(空间)规律。得到用户流量、区域分布、请求特点、应用服务瓶颈点、服务器的性能指标等等,根据这些因素有针对性地对业务流程本身、系统架构进行优化。

优化的原则:应该有灵活的扩展性、尽量低的成本、高性能。

优化的思路(出发点):



    1. 负载均衡系统

    2. 反向代理系统

    3. Web服务器系统

    4. 缓存系统

    5. 分布式存储系统

    6. 数据库集群系统

    7. 异步计算策略

一、负载均衡系统

在架构中加入负载均衡系统, 负载均衡系统可以使用的位置: 可以使用在web应用服务之前,也可用在数据库集群前(如:在MySQL集群中,使用LVS将数据库请求分散到各个从服务器)。

实现方式包括:硬件负载均衡、软件负载均衡。

硬件负载均衡效率高,价格贵,如F5等;

软件负载均衡系统价格低或免费,效率较硬件低,但一般够用,如LVS,nginx也有负载均衡功能。

二、反向代理系统

在系统架构中加入反向代理。

作用一:将请求映射到对应服务的服务器。首先需要划分业务,并统一约定和规范各个业务对应服务的URI,然后通过反向代理服务器将请求映射到各服务所在的服务器。这样可以避免在业务集中的情况下出现的单一功能发生瓶颈导致其他功能受到影响。(系统设计时,各业务服务应该按功能或模块进行拆分,便于进行横向分布式扩展)

作用二:提高系统吞吐量。数据在网络中传输很耗时,反向代理服务器可以使应用服务器不必再直接和客户端进行连接,阻塞进程等待数据接收完成,而是在反向代理服务器将数据缓冲完成后一次性快速传输给应用服务器。

作用三:对静态资源不必通过应用服务器,直接找到并返回,减轻应用服务器压力。

目前普遍使用Nginx作为反向代理服务器,它还是高性能http服务器,同时可以进行负载均衡。


三、Web应用系统优化

1.前端展示层:



    • 页面静态化(HTML化);


动态页面静态化,可通过CMS系统对非动态信息页面进行静态化(静态化实际就是用程序将html页面的代码输出到一个html文件中,就成了静态页面);

静态化后的页面同样可以通过CDN加速,或存入缓存。

适用于更新不频繁的内容。



    • 图片服务器和分离(CDN加速);

2.服务端程序:




    • 优化业务流程

    • 更高效的算法

    • 优化各种影响程序性能的代码细节

四、缓存系统

使用缓存减少对数据库的直接操作,减轻查询时的I/O压力

按照存放位置不同,可分为客户端缓存、服务端缓存。

1.客户端缓存(主要是缓存页面):



    • 浏览器缓存

    • 网关、代理服务器缓存


2.服务端缓存:



    • 页面缓存(常通过发布系统生成静态页面,适用于信息发布类网站,或数据非频繁进行动态变化的部分)。


缓存实现手段:可对页面整体缓存,也可以缓存片段,如ESI cache。使用CDN也算是一种缓存方式。



    • 数据缓存。


缓存框架:ehcache

NoSQL:redis、memcache

使用缓存还应该使缓存命中率更高。

五、分布式存储系统

对于需要占用大量存储空间的文档、图片、视频资源,单台服务器无法全部存储,需要大量大存储空间的服务器来保存,因此,使用大规模分布式存储系统提供基础的存储服务。


六、数据库系统

数据库的高性能方案有:优化当前数据库,和建立集群。

当数据库开始出现性能下降的时候,最优先的方案是:优化当前数据库的性能,而非立刻建立集群。应该保持简单原则,毕竟会增加很大复杂度。


1.当前数据库优化策略:



    • 建立索引

    • 优化sql

    • 使用效率更高的操作方式。如大量数据批量插入。


2.建立集群:



    • 读写分离

    • 从库的负载均衡

    • 分片、分库、分表(sharding)


3.mysql集群搭建方案:



    • 使用官方推荐:Mysql Cluster方案

    • 使用mysql中间件atlas方案

    • 其他集群方案


七、异步计算方案

对于实时性要求不高,或者不重要但很耗时的操作,采取异步执行方案。即先行返回结果,再继续执行。如将用户上传的文件进行分发到多台机器、图片处理、视频转码等操作。