架构搭建-实践篇

遗留问题:

下午:
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/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的读写分离配置

2个坑:

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

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

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





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

分库分表技术

搜索引擎


可用性:

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

猜你喜欢

转载自zjjndnr.iteye.com/blog/2388222