可靠性:简单来说就是少出bug,稳定性很高
处理:1. 代码方面需要做好更多的异常处理,没写一行代码需要想打这行代码可能的风险,比如线程安全问题、可能跑出的异常,每个变量需要考虑空指针等问题。
2. 故障的隔离(安全保障)
3. 建立强大的监控系统
高性能:并发高
处理方法:这里方法很多,大概,负载均衡、cache、业务逻辑判断(不同业务不同场景做不一样的处理)、降级、异步……
具体如下:
前端:
轻量化前台的js
页面静态化(咨讯类网站)
页面渲染优化
CDN技术(Content Delivery Network)
后端java:
合适使用缓存技术(本地缓存or集中式缓存)
异步处理(消息)
IO的合理负载,减少IO操作(网络IO本地文件操作IO)
应用的负载均衡(硬件负载均衡F5/软负载均衡LVS)
分布式处理(拆分系统,独立化运行,核心应用服务化,解决单一处理的瓶颈)
限流
降级处理
故障的隔离(安全保障)
避免长事务
预热
避免热点问题(本地缓存其),数据通过相关规则分布式存储
冷数据存低廉性能低的硬件上面 如历史数据 读的几率很少(比如淘宝的交易快照)
根据业务特性采用处理不同的方式。(比如微薄的话,给粉丝推送消息,可根据有些粉丝不是今天的活跃用户 所以不想实时发消息给他。)
……
解少网络传输
代码优化
基础知识(String ,StringBuffer)、锁、连接/线程池……
数据库:
读写分离(高并发)
主备切换
分表分库
索引、有效使用索引
其他方面:
历史数据和现有数据拆分
连接池
SQL的优化
NOSQL 非关系型数据库 (写的性能高)
……
可伸缩:可以随时新增减少服务器数量
处理: 1. 减少对OS的依赖;
2. 减少对应用服务器等非war的依赖。
可扩展:代码的扩展性高,可以满足将来或者现在的业务
处理: 代码自己需要考虑
可迁移:服务器或者程序的随时迁移性
1. 对于DB的更新,需要走统一应用的接口,不能开放谁都可以访问;
2. 减少对OS的依赖;
3. 配置信息不要写IP,一定要有域名,代码里面更不能写死配置,最好所有配置信息都统一管理