程序员Java学习笔记

Web进阶 | 构建高可靠、高性能的Web应用

2017-03-24  本文已影响150人  拾壹北

功能 -> 性能✔ -> 智能

可靠性:可扩展性、服务降级、负载均衡、灰度
性能:缓存、并发、池化、异步

一、可靠性

1、应用扩展
垂直扩展:增加一台机器硬件数量(并不一定是单机的) 水平扩展:增加多台机器
2、数据库扩展

(2)如何使代码优雅(代码层不牵扯数据库分表)
Spring动态数据源 -->> 连接不同的库
分表组件:如TSharding,是一个简易 sharding 组件,也是一个 Mybatis 分库分表组件。

Mybatis 分库分表组件 TSharding-Client

3、负载均衡
4、服务降级

二、性能

1、并发
Servlet非线程安全
每个Servlet线程都有自己的存储区域,计算完毕后再将数据写回寄存器,线程不安全

多线程环境下,需要使用线程安全的集合、共享资源加锁等。

并发锁
2、缓存
缓存:将请求频繁的数据从DB / 磁盘加载到内存 redis提供了丰富的数据结构
3、序列化
概念

将对象的状态信息转换为可以存储或传输形式的过程

方式

java序列化一定应该注意**的6个事项
1、如果子类实现Serializable接口而父类未实现时,父类不会被序列化,但此时父类必须有个无参构造方法,否则会抛InvalidClassException异常。
2、静态变量不会被序列化,那是类的“菜”,不是对象的。
3、transient关键字修饰变量可以限制序列化。
4、虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化ID是否一致,就是 private static final long serialVersionUID = 1L。
5、Java 序列化机制为了节省磁盘空间,具有特定的存储规则,当写入文件的为同一对象时,并不会再将对象的内容进行存储,而只是再次存储一份引用。反序列化时,恢复引用关系。
6、序列化到同一个文件时,如第二次修改了相同对象属性值再次保存时候,虚拟机根据引用关系知道已经有一个相同对象已经写入文件,因此只保存第二次写的引用,所以读取时,都是第一次保存的对象。读者在使用一个文件多次 writeObject 需要特别注意这个问题(基于第5点)。

4、池化技术
场景
类型
5、异步
前端轮询、后端异步
消息队列
HTTP
Dubbo
上一篇 下一篇

猜你喜欢

热点阅读