MyException - 我的异常网
当前位置:我的异常网» 软件架构设计 » 架构筹建-实践篇

架构筹建-实践篇

www.MyException.Cn  网友分享于:2013-08-16  浏览:0次
架构搭建-实践篇

1.根据不同行业特点,需求特点,进行详细设计,系统规模,流量评估

2.技术选型,这里要求,能针对绝大部分需求给出技术解决方案

3.能够指导测试工程师,测试方案,测试工具,测试技术

4.能够指导运维公司,硬件,网络环境,需要哪些基础软件以及优化

4.掌握系统,系统各个组件的安装,配置,使用优化技巧

5.明确项目技术层次,能够选择匹配项目技术能力的员工

6.时刻了解最新技术动态

 

比如,性能测定诊断与优化,jvm,并发实践,redis,mq,网络等等优化能力

 

rpc 有很多开源的,拿一个过来用用,然后,把监控、限流、服务降级啥的逐步做好

 

有流量非常大的业务场景,用微服务架构还是很有好处的,不是很大,一般的rpc,soa基本够用了.....

 

 

=====================建构实践==============================

1.总结架构发展流程,并流利表达
2.需要记录自己的任务进展以及相关成果

系统规模(日活)与硬件评估 待
需求,详设与技术选型(微服务)待
测试工具与测试方案(包括各种技术单个和集群)待
前沿技术 待


【高性能】

 

网站发展初期,往往一台机器部署:web应用,数据库,文件服务器;
随着网站用户增加,会将web应用服务器,数据库服务器,文件服务器分离到不同的服务器上;
接着根据出现性能瓶颈的位置,选择缓存,应用横向扩容,数据读写分离,异步处理等一系列技术;
当以上措施都无法满足时候,尤其数数据读写无法满足海量数据处理时,需要进行分库分表或者采用微服务架构
 
图:待补
 

 

网站初期采用的架构

说明:(1)为保证高可用,在网站初期各个组件就必须集群化 (2)这里考虑后期使用OpenResty,添加了web应用层

接入层(Nginx*2+keepalived)+Nginx集群+ tomcat集群 + 单Mysql库(读写分离) +多级缓存

1.接入层(流量负载层+核心Nginx层)

功能:

通过LVS+HAProxy将流量转发到核心Nginx层,实现流量的负载均衡;

在核心Nginx层可以实现流量分组,内容缓存,请求头过滤,故障切换,限流,防火墙等通用功能

这里:没有采用流量负载层,通过keepAlived实现核心Nginx层的高可用

 

软件/技术选用:负载均衡器(Nginx,F5,LVS,HaProxy),高可用热备方案(keepAlived)

 

方案规划:Nginx*2 + keepAlived*2

VIP/监听端口 IP 主机名 Nginx端口 默认主从
192.168.1.100/88 192.168.1.111 edu-proxy-01 80 Master
192.168.1.112 edu-proxy-02 80 Slaver

注:由于机器的缘故,在测试方案里 负载均衡器Tomcat集群配置在相同的机器上;实际的主机名edu-web-01,edu-web-02

 

实践方案/文件:

安装过程:参考Keepalived+Nginx实现高可用Web负载均衡即可。
安装和配置的软件: /usr/local/nginx              /usr/local/keepalived

配置文件地址:/etc/keepalived
相关组件/配置文件:见附件

相关命令:

#/usr/local/nginx/sbin/nginx 

#/usr/local/nginx/sbin/nginx -s reload 

# service keepalived stop/start/restart
 
补充:
1.亿级流量-负载均衡和反向代理部分待补充到Nginx-基础篇(反向代理/负载均衡/页面缓 .
 

 

2.业务Nginx层

作用:比如商品详情页,可以在业务Nginx实现业务逻辑,或者反向代理到如Tomcat集群;

在这一层可以实现内容压缩(放在这一层目的是,减少核心Nginx的CPU压力,将压力分散到个业务Nginx),A/B测试,降级。

 

软件/技术选用:Nginx glassfish

 

方案规划:

IP 主机名 端口号
192.168.1.106 edu-nginx-01 80
192.168.1.107 edu-nginx-02 80
192.168.1.108 edu-nginx-03 80

 

安装配置最佳实践:参考本博文的相关内容

软件安装位置:/usr/local/nginx

配置文件位置:/usr/local/nginx/conf/nginx.conf 配置负载均衡的一些信息

相关组件/配置文件:见附件nginx+keepalived里面的 nginx(业务Nginx配置).conf

相关命令:

#/usr/local/nginx/sbin/nginx -s reload 

# service keepalived stop/start/restart

 

3.Web服务器集群

作用:

软件/技术选用:Tomcat,glassfish,webLogic,webService,Jboss

 

方案规划:

IP 主机名 端口号
192.168.1.111 edu-web-01 8081
192.168.1.112 edu-web-02 8081

 

安装配置最佳实践:参考本博文的相关内容

软件安装位置:/usr/local/src/tomcat7

配置文件位置:/usr/local/src/tomcat7/conf/server,xml 配置端口号,根目录等

相关组件/配置文件:见附件

相关命令:

 

# /usr/local/src/tomcat7/bin/startup.sh & tail -f /usr/local/src/tomcat7/logs/catalina.out 
动静分离:由于考虑OpenResty,静态资源分布在Nginx-web服务器上,参考: Nginx+Tomcat负载均衡配置

附加问题:
3.1 .session一致性问题

关于 tomcat 集群中 session 共享的三种方法

3.2 数据一致性问题

待写

 

 补充:

Tomcat优化

 

4.缓存

作用:缓存是性能优化首先要想到和使用的工具

软件/技术选用:Redis,Memcache
方案规划:      配置文件地址 命令
IP PORT 主机名
192.168.1.122 7770(主)7771(从)8880(主)8881(从)6660(主)6661(从) edu-redis-01
192.168.1.123 7770(主)7771(从)8880(主)8881(从)6660(主)6661(从) edu-redis-02
192.168.1.124 7770(主)7771(从)8880(主)8881(从)6660(主)6661(从) edu-redis-03
说明:3台的7770/8880端口服务做主集群;7771/8881做从集群;Redis未分片122:6660主,122-123-124的6661做从集群
配置文件:见附件nutcracker.yml
TWEMPROXY:分片代理服务器
IP  
192.168.1.122  
基本命令及配置文件地址
需要在192.168.1.122,123,124 上分别启动:
SSDB 7770 7771 8880 8881
nohup /usr/local/ssdb/ssdb-server   /usr/local/ssdb-master/ssdb_basic_7770.conf &  
nohup /usr/local/ssdb/ssdb-server   /usr/local/ssdb-master/ssdb_basic_7771.conf &  
nohup /usr/local/ssdb/ssdb-server   /usr/local/ssdb-master/ssdb_desc_8880.conf  &  
nohup /usr/local/ssdb/ssdb-server   /usr/local/ssdb-master/ssdb_desc_8880.conf  &  

REDIS 
192.168.1.122:6660 6661
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis_6660.conf &
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis_6661.conf &
192.168.1.123 6661
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis_6661.conf &
192.168.1.124 6661
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis_6661.conf &

启动Twemproxy
nutcracker.init {start|stop|status|restart|reload|condrestart}
nutcracker -d -c /usr/local/twemproxy/conf/nutcracker.yml -p /usr/local/twemproxy/run/redisproxy.pid -o /usr/local/twemproxy/run/redisproxy.log

 

主要参考:缓存 (5)

Redis介绍,安装使用及集群介绍

SSDB介绍与使用

Twemproxy-缓存代理分片机制

Redis语法,Key值设计及常用案例介绍

Redis 3.0 cluster 集群

 

多级缓存实践:结合账户系统

1.HTTP缓存

 

2.本地全量缓存

 

3.分布式缓存

    缓存:用户信息,具体java操作参见:

 

4.应用级缓存

 

补充:

1.亿级流量-Http缓存部分

2.首先是异步,其次使用消息队列,最后可监听binlog的变化

3.多级缓存的搭建

 

 

5.Mysql集群(读写分离/分库分表)

5.1

 

5.2

 

5.3 基于spring-Mybatis的读写分离配置

 

 

 

6.基于Dubbo的分布式服务治理

作用:

 

参考:

构建基于Dubbo的分布式项目

 

环境规划

组件 说明 IP port
edu-web-boss consumer 192.168.1.111+192.168.1.112 8081
edu-service-user provider /usr/server/edu/service/user -
provider 192.168.1.111+192.168.1.112 8082
zookeeper-3.4.6 注册中心 192.168.1.106/107/108 2181-2182-2183
MySQL5.6 数据库 192.168.1.122 3306

 这里把未分布式前的tomcat7变成:tomcat7-server1  tomcat7-server2

 

[root@edu-web-01 src]# mv tomcat7 tomcat7-server1
[root@edu-web-01 src]# cp -r tomcat7-server1 tomcat7-server2
 修改tomcat7-server2的相关端口:
shutdown 端口:8005  主要负责启动关闭.    
ajp端口:8009 主要负责通过ajp均衡(常用于apache和tomcat整合)    
http端口:8081 可以通过web页面直接访问(nginx+tomcata整合)    
#注* 如果tomcat1三个端口分别为:8005 8009 8081 ,那么tomcat2端口在此基础上都+1,即为:8006 8010 8082 

 

 

 独立部署Dubbo服务

cd /usr/server/edu/service/user/  
./service-user.sh start  
./service-user.sh stop  
./service-user.sh restart 

 

Dubbo 服 务消费者 Web 应用 war

 

#启动
/usr/local/src/tomcat7-server1/bin/startup.sh & tail -f /usr/local/src/tomcat7-server1/logs/catalina.out 
#停止
/usr/local/src/tomcat7-server1/bin/shutdown.sh & tail -f /usr/local/src/tomcat7-server1/logs/catalina.out

测试:

192.168.1.111:8081/edu-web-boss

 

 





构建微服务
因为单个应用存在的一系列问题,选择微服务的特点,对业务模块分割,微服务,提高了。。还不同应用不同步,提高数据处理能力

分库分表技术

搜索引擎

 


可用性:

 

包括监控,降级,限流等慢慢建设
包括:动态变更配置

 

 

文章评论

不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员应该关注的一些事儿
程序员应该关注的一些事儿
鲜为人知的编程真相
鲜为人知的编程真相
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
我的丈夫是个程序员
我的丈夫是个程序员
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
10个调试和排错的小建议
10个调试和排错的小建议
中美印日四国程序员比较
中美印日四国程序员比较
程序员和编码员之间的区别
程序员和编码员之间的区别
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员都该阅读的书
程序员都该阅读的书
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
Java程序员必看电影
Java程序员必看电影
一个程序员的时间管理
一个程序员的时间管理
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
漫画:程序员的工作
漫画:程序员的工作
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
如何成为一名黑客
如何成为一名黑客
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序员必看的十大电影
程序员必看的十大电影
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
旅行,写作,编程
旅行,写作,编程
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员的鄙视链
程序员的鄙视链
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
总结2014中国互联网十大段子
总结2014中国互联网十大段子
代码女神横空出世
代码女神横空出世
那些争议最大的编程观点
那些争议最大的编程观点
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
编程语言是女人
编程语言是女人
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
老程序员的下场
老程序员的下场
每天工作4小时的程序员
每天工作4小时的程序员
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有