架构搭建-实践篇

高并发系统架构设计

遗留问题:

下午:
1.线程池
2.读写分离:AOP
3.Guava-缓存 和 spring eache缓存
4.发送短信


缓存框架

异步队列框架

分库分表框架

高可用框架(结合学习dubbo的高可用实现)

 

 

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/88192.168.1.111edu-proxy-0180Master
192.168.1.112edu-proxy-0280Slaver

注:由于机器的缘故,在测试方案里 负载均衡器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.106edu-nginx-0180
192.168.1.107edu-nginx-0280
192.168.1.108edu-nginx-0380

 

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

软件安装位置:/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.111edu-web-018081
192.168.1.112edu-web-028081

 

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

软件安装位置:/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
方案规划:      配置文件地址 命令
IPPORT主机名
192.168.1.1227770(主)7771(从)8880(主)8881(从)6660(主)6661(从)edu-redis-01
192.168.1.1237770(主)7771(从)8880(主)8881(从)6660(主)6661(从)edu-redis-02
192.168.1.1247770(主)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的读写分离配置

2个坑:

(1)改文件还是读target里面的内容配置了这个 <aop:aspectj-autoproxy proxy-target-class="true" />   

(2)配置文件先后顺序很重要否则读不到

 

 

 

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

作用:

 

参考:

构建基于Dubbo的分布式项目

 

环境规划

组件说明IPport
edu-web-bossconsumer192.168.1.111+192.168.1.1128081
edu-service-userprovider/usr/server/edu/service/user-
provider192.168.1.111+192.168.1.1128082
zookeeper-3.4.6注册中心192.168.1.106/107/1082181-2182-2183
MySQL5.6数据库192.168.1.1223306

 这里把未分布式前的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

 

 





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

分库分表技术

搜索引擎

 


可用性:

 

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值