《互联网时代的软件革命-SaaS架构》学习笔记二

“4+1”视图时架构设计的结构标准,场景视图/逻辑视图/开发视图/过程视图/物理视图
| 独立数据库 | 共享数据库,隔离数据框架 | 共享数据库,共享数据结构(通过Tenant ID区分) | |
|---|---|---|---|
| 优点 | 简化数据模型的扩展设计,满足不同租户的独特需求;出现故障,恢复数据比较简单 | 逻辑数据隔离,但是不完全隔离;每个数据库可以支持更多的租户数量 | 维护成本和购置成本低,每个数据库支持 |
| 缺点 | 增大了数据的安装数量,带来维护成本和购置成本 | 出现故障,数据恢复比较困难,因为牵扯其他租户数据;如果需要跨租户统计数据,存在一定困难 | 隔离级别低,安全性低,需要在设计开发时加大对安全的开发量;数据备份和恢复困难 |
| 隔离级别 | 高 | 中 | 低 |
| 共享级别 | 低 | 中 | 高 |
| 安全性 | 高 | 中 | 低 |
| 成本 | 高 | 中 | 低 |
安全性设计:系统级和程序级
系统级:
程序级:
重点在于租户管理和数据隔离
租户管理:包括注册等
数据隔离:变更表结构、增加TENANT_ID字段
建立合适的索引对基于数据库的应用都非常重要,如果一个数据库操作不能有效利用索引,不得不面临对一个庞大数据表的扫描,从而对整个系统的数据库的综合性能造成极大影响。
调整如下:
| 解决方案 | 使用场景 |
|---|---|
| 冗余存储关联字段 | 业务需求上可以接受冗余导致的不一致,或者冗余数据可以很冗余被同步更新 |
| Cache缓存 | 变更概率不高,但对数据一致性要求较高 |
| 直接删除关联字段 | 不是必须包含的被关联的字段,可以直接从列表查询中去除 |
| 拆分成多次查询 | 对单个数据的查询,如果设计张管链表,有时分多次查询会比一次复杂的关联查询更加合适 |
Case by case 去处理
Cashe所缓存的内存就是数据库中存储的内容,采用Cache避免了对数据库的频繁访问。
改造前,每次权限检查时会根据用户、权限、角色的关联表查询到用户对于某项操作是否由权限,每次权限查询都会涉及几次数据库的操作,对数据库访问的压力可想而知。
权限数据作为被频繁读取而改动很少的数据,是可以做Cache的首选数据。(cache技术MemCache和JBoss Cache)采用MemCache,可以考虑在系统启动时即载入Cache,在发现变化时候,更新Cache。由于用户具有那些角色是与用户相关的数据,则应该在用户登录的时候获取用户的角色,并放入用户session中,验权过程不需要涉及数据库查询,通过session和cache的访问即可完成。
为了缓解实时计算给数据库带来压力,优化策略如下
异步操作没有从本质上提升系统性能或数据吞吐量,但是可以使得用户体验得到极大提升,降低系统的并发负载。
Web开发性能优化
| 内容类 | 服务器类和cookie类 | Java scrip、css、图片类 | 移动应用类 |
|---|---|---|---|
| 减少http请求/减少DNS查询/避免跳转/缓存AJAX/延迟加载/提前加载/减少DOM元素数量/用域名划分页面内容/减少frame/避免404错误/ | 使用CDN/为文件头制定Expires或cache-control/GZip压缩网页/配置实体网页/尽早刷新输出缓存/使用Get完成AJAX请求/减小cooie体积/网页内容使用cookie域名 | 使用外部JavaScript和CSS/削减JavaScript和CSS剔除重复脚本/减少DOM 访问/开发智能事件处理程序/把样式表置于顶部/避免使用CSS表达式(Expression)/使用外部JavaScript和CSS/用代替@import/避免使用滤镜/优化图像/优化 CSS Sprites不要在HTML中缩放图像/favicon.ico要小而且可缓存。 | 保持单个内容小于25KB、打包组件成复合文本 |
Http服务器性能优化,首选Apache
统计出每个请求的服务端响应时间。网络时间和客户断加载时间,并且可以安装页面、用户所在地区、时间等多个维度进行统计分析。
侵权请联系删除
下一篇讲解配置多租户实现方式