避免重复读取

避免为了确认操作是否有效而读取刚刚写入的数据,如近期处理需要,可把数据存储在本地或分布式缓存。因为与不太可能出现的操作失败所产生的成本相比,确认操作成本更高。而且这类活动与有效扩展相背离。

大多数情况下,数据损坏是在实际写入时发现的。读取刚刚写入的数据使系统事倍功半。 一个较好的方案是直接读取正在执行的操作返回数据,并相信它的正确性,从而提高有价值的事务处理量。

对数据损坏最稳妥的保护措施是合理地实现系统的高可用性,并有多个数据副本,如备用数据库或存储复制。理想的情况下最终实现多活。

当然,并不是每个“读取刚写入数据”都是工程师试图对其刚写入的数据进行验证。有时是用户立即请求刚写入数据导致的。如果知道可能会用到刚写入的数据,就该把它存在本地。大多数产品的注册流程就是常见的好例子。通常系统希望把即将提交并永久注册的“记录”展现给用户。另一个可能是大多数电子商务网站的购物车系统嵌入的购买流程。不管哪种情况,如果所写入的数据会在不久的将来被用到,就应当通过缓存留住它。

在为用户提供可能立即需要的数据时,有一个非常好的技巧是直接将数据展现在客户屏幕上(应用或浏览器),而不是再发出数据请求。或通过URI传递数据并在随后的页面中使用。


停止重定向

如有可能,避免重定向;当确实需要时,采用采用正确的方法。可以考虑通过服务器配置来实现,而不是利用HTML或者其他基于代码的解决方案。因为,总的来说,重定向会延迟用户进程,消耗计算资源,造成错误,不利于页面在搜索引擎中的排名。所以我们应当正确而且仅在必要时使用重定向。

要求使用重定向的原因有:跟踪点击的内容或者广告,误拼了域名、别名或者短域名,或者域名变更。甚至还有一个PRG(Post/Redirect/Get)的设计模式用来避免一些表格的重复提交。这种模式基本上是在表格提交时调用POST操作来使浏览器重定向,倾向于以HTTP 303来响应。

重定向方法:

  1. 构建一个HTML页面。但是需要用户再次点击以检索他们希望查看的真实页面。
  2. 使用HTML重定向元标签“refresh”并自动将新页面发送到用户的浏览器。但是浏览器必须要先解析HTML代码然后才能出重定向。
  3. 通过代码完成重定向,例如:PHP。不需要浏览器解析HTML,而是通过头文字端中的HTTP状态码进行重定向。但是仍然需要服务器来解释PHP脚本。
  4. 通过嵌入在服务器中的模块完成重定向。例如:Apache的mod_alias和mod_rewrite模块。

绕过重定向,以点击跟踪为例,与把用户请求发送到服务器,再将用户请求发送到所需站点相比,一个很好的替代方案是在浏览器中使用onClick事件处理程序通过JavaScript函数来处理。该方案的优点是不需要用户的浏览器先请求页面或接受页面甚至通信包头,然后再开始加载所需要的页面。


放宽时间约束

因为大多数关系型数据库的ACID属性,要扩展带有时间约束的系统难度极高。考虑时间约束的必要性,与用户短暂的等待相比,系统因无法扩展而停止服务更为严重。所以应尽可能放宽系统中的时间约束。

从保存数据一致性来说,即使能以秒计的速度从副本或从属数据库中读取数据,也会出现两个用户都希望查看库存中最后一个可以购买的某个商品的情形。

布鲁尔定理(CAP)阐明尽管在分布式环境应用设计中有三个核心要求存在,但不可能同时满足所有三个要求,它们分别是:

  • 一致性:从客户角度看,一组操作同时发生。
  • 可用性:每个操作必须都能收到预期的响应。
  • 分区容错性:即使个别消息丢失,操作仍然可以完成。

用来解决这个问题的方法叫BASE,代表着解决CAP问题的架构,即“基本可用(Basically Available),软状态(Soft state),和最终一致(Eventually consistent)”。

重新设计系统来适应最终的一致性的方法是放宽时间约束。当用户只查看某个商品时,系统将不会保证该商品是可以购买的。当把该商品放入购物车时,应用将在写数据库或主数据库中锁定记录。而其他的用户查看该商品时,就未必有货可供他们购买。


想了解更多关于互联网技术架构:互联网技术架构专栏

互联网技术架构——画龙点睛相关推荐

  1. 互联网技术架构的启示

     互联网技术架构的启示 最近,"金融电子化"的微信(fcmag1993)中发表了中国建设银行信息技术管理部副总经理王申科撰写的一篇精彩文章"互联网技术架构给我们的启示 ...

  2. 《架构真经:互联网技术架构的设计》大道至简

    本节书摘来自华章出版社<架构真经:互联网技术架构的设计>一书中的第1章,第1节,作者 小象学院 杨 磊,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 大道至简 ...

  3. 免费分享:5本架构师书籍,架构解密从分布式到微服务,分布式服务架构:原理、设计与实战,架构真经互联网技术架构的设计原则,架构探险

    1.架构即未来 现代企业可扩展的Web架构流程和组织 PDF 下载 下载地址:http://www.askwinds.com/r-c/down-info-02/6fbd80dc949241298e6a ...

  4. 阿里内部中台战略思想与架构实战,一部互联网技术架构的实践与发展史

    移动互联网无处不在的今天,不同的学习方式让我们受益颇多.有人喜欢通过手机阅读各类技术专家的公众号分享:有人喜欢通过逛逛不同的博客,来了解当前时下的技术:也有人喜欢通过社区的形式,跟优秀的导师们一起梳理 ...

  5. 互联网技术架构——有备无患

    不可能构建出永远不会故障的系统,所以需要考虑对故障隔离和故障控制的需求.下面是几种限制故障影响的方法,减少故障的频率,提高产品的整体可用性. 用泳道隔离故障 在设计中实现故障隔离区或泳道,需要拆分数据 ...

  6. 从技术演变的角度看互联网后台架构

    这是去年在部门内部做的一个面向后台开发新同学的课程,因为其他BG一些同学要求分享,所以发一下. 其实内容都是些常见开源组件的high level描述,比如flask, express框架,中间件的演化 ...

  7. 【MCtalk】“互联网+”技术融合论坛

    本期MCtalk ---------- 互联网+时代 互联网企业与传统企业该如何技术融合? 互联网正在重构传统企业,并快速迭代其业务模式.云+端.人工智能.机器学习.区块链等新技术,代表了互联网技术的 ...

  8. 互联网分布式架构技术概述

    简介 作为一名架构师,我们要专业,要能看懂代码,及时光着臂膀去机房,也能独挡一面!及时同事搞不定问题,或者撂挑子,你也能给老大一个坚定的眼神:不怕,有我在!还能在会议室上滔滔不绝,如若无人,让不懂技术 ...

  9. GIAC 2020 全球互联网架构大会演讲实录:基于TarsGo的微服务技术架构实践

    2020年8月14日-15日,GIAC 2020 全球互联网架构大会于上周五正式在深圳开幕. GIAC(GLOBAL INTERNET ARCHITECTURE CONFERENCE)是长期关注互联网 ...

最新文章

  1. 去掉字符串两端的全角空格和半角空格(含源代码)
  2. Web.config中连接字符串的加密和解密
  3. 聚类(Clustering):hierarchical clustering 层次聚类及其应用
  4. 839 - Not so Mobile
  5. 用GDB调试程序(11)──查看运行时数据(2)-转
  6. openlayers5学习笔记-001
  7. 巨量引擎初级营销认证题库_“移动营销,智赢未来”巨量引擎4月招商加盟专场沙龙圆满落幕...
  8. matlab cpu序列号,获取cpu序列号 - huhaoren的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. 标准数独解题之旅(用一道数独题讲解最基本的5种解题技巧)
  10. html背景图透明文字正常,背景图片 透明 文字不透明
  11. Adidas商品上货监控,有货时提醒商品尺码
  12. jenkins自动化部署
  13. oracle chr 49824,Systemy sprzętowo-programowe | Oracle Polska
  14. 2种升级 macOS 12 Monterey 的方法:快速又干净的升级方式
  15. 用mysql查询图书的信息_PHP+MySQL 利用mysql_fetch_row模糊查询图书信息
  16. centos 7使用gcc编译c语言,CentOS 7编译安装gcc 4.9.4
  17. afrog 进阶篇(实战)
  18. SemanticKITTI点云拼接+PCL可视化
  19. 使用kubeadm安装k8s集群的完整步骤(k8sv15.1)
  20. OpenBLT的介绍、应用场景及开源许可

热门文章

  1. java中的this的用法_java中this的用法
  2. CC2640R2F BLE5.0 蓝牙协议栈GAP Bond管理和LE安全连接
  3. 【第19天】内涵深厚才能妙语连珠
  4. 微信开发——熟悉支付流程
  5. 评估指标——均方误差(MSE)、平均绝对误差(MAE)
  6. C语言|博客作业07
  7. 项目报找不到属性时解决方法
  8. Elixir: Enum函数总结
  9. 光遇测试服要用什么更新软件,光遇测试服最新版
  10. 【报告分享】2019短视频平台数据报告-抖音快手.pdf(附下载链接)