遗留问题:
下午:
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一致性问题
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 |
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)
多级缓存实践:结合账户系统
1.HTTP缓存
2.本地全量缓存
3.分布式缓存
缓存:用户信息,具体java操作参见:
4.应用级缓存
补充:
1.亿级流量-Http缓存部分
2.首先是异步,其次使用消息队列,最后可监听binlog的变化
3.多级缓存的搭建
5.Mysql集群(读写分离/分库分表)
5.1
5.2
2个坑:
(1)改文件还是读target里面的内容配置了这个 <aop:aspectj-autoproxy proxy-target-class="true" />
(2)配置文件先后顺序很重要否则读不到
6.基于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
构建微服务
因为单个应用存在的一系列问题,选择微服务的特点,对业务模块分割,微服务,提高了。。还不同应用不同步,提高数据处理能力
分库分表技术
搜索引擎
可用性:
包括监控,降级,限流等慢慢建设
包括:动态变更配置