怅然|经验分享:资深架构师教你什么是网络应用架构?( 三 )
SQL(Structured Query Language, SQL) , 代表 「结构化查询语言」 。 被发明于上世纪七十年代 , 作为标准的关系数据库数据查询方式 , 最终被广泛接受和使用 。 SQL 数据库将数据存储在数据表中 , 通过 ID 等字段进行表关联 。
举一个简单的存储用户历史地址信息的的例子简要说明:现有两个表:【用户表: users】和【用户地址表: user_addresses】 , 这两张表通过用户编号相关互联 , 如下图所示 。 这些表相互关联 , 是因为【用户地址表】的 {用户编号: id} 信息是用户表中 {用户编号: id} 在用户地址表的外键 (Foreign Key, FK) 。
如果你对 SQL 不太了解 , 我强烈建议你学习这个基础教程 , 可汗学院的 SQL 入门课:数据查询与数据管理, SQL 在 Web 开发领域应用相当广泛 , 你至少需要了解基础知识 , 这样才能恰当地设计应用架构 。
NoSQL 代表 Non-SQL 或 Not-Only-SQL , 是指新一代的数据库技术 , 用于处理大型网络应用所产生的巨量数据(大多数关系型数据库无法很好地水平拓展 , 只能垂直拓展 , 直到性能瓶颈) 。 如果你对 NoSQL 一无所知 , 我建议你从以下介绍入手:
5. 缓存服务
【怅然|经验分享:资深架构师教你什么是网络应用架构?】缓存服务为相关信息提供简单的键值数据存储 , 可在接近 O(1) 时间内保存和查找信息 。
O(1) 是指算法的时间复杂度为常数阶 , 换言之 , 此场景下 , 任何单次查询的时间都是相对稳定的 , 和该条查询指令复杂度基本无关 。
应用服务同样会利用缓存服务预先存储一些计算量较大的计算结果 , 以便于下次需要时直接从缓存中获取结果而重新计算 。 应用服务也可能从其他服务获取缓存 , 如数据库查询结果 , 外部服务调用结果 , 指定URL 的 HTML 文件 , 以及其他服务 。 下面是真实世界的一些案例:
- 谷歌直接缓存常见的搜索关键词如「狗」或者「泰勒·斯威夫特」的搜索结果 , 而非搜索时重新计算 。
- Facebook 缓存你登入账户时所看到的信息 , 如你的发帖记录信息和朋友列表信息等数据 。 这篇文章详细介绍了 Facebook 的缓存技术应用 。
- Storyblocks 缓存服务端的 React 渲染生成的HTML 文件 , 搜索结果和提前输入结果等信息
6. 任务队列和服务器
在不涉及于用户交互的场景中 , 网络应用需要异步地完成很多工作 。 例如 , 为了搜索查询结果 , 谷歌需要用爬虫遍历全网的内容并编制索引 , 谷歌不是在用户搜索时才进行上述操作 , 相反 , 它异步地爬取网络内容 , 并预先更新查询索引 。
尽管有很多应用架构可用于完成异步任务 , 但最通用的是「任务队列架构 (Job Quene)」 。 它包括两个组件:一系列等待被执行的「任务」和数个用于执行任务的任务服务器(通常被称为 Workers )
任务队列存储一系列需要被异步执行的任务 。 先进先出(First In First Out, FIFO)队列是最简单的任务队列 , 尽管多数应用最终需要可以按照优先级排序的队列系统 。 不管是由日常任务调度安排或是由用户操作触发 , 一旦应用服务需要执行任务 , 它都会将合适的任务添加到队列中 。
- 人民网-财经频道|【行走自贸区】山东自贸区济南片区:力争拿出更多首创性改革试点经验
- 腕表之家|现代和复古冲撞融合 上手分享欧米茄海马300
- 云顶之弈|云顶之弈10.18阵容推荐 重装秘术蛇女阵容运营思路分享
- 美容|蒋依依分享护肤干货,网友纷纷不理解:20岁不到就要抗衰老了?
- 新闻联播|先后6次改扩建,山西“夺命”饭店事件背后:盖房没有图纸全凭经验
- 券商中国|银河证券罗黎明:用专业与客户同行,分享基金经理“最强大脑”
- 农村改革|农业农村部:总结经验,大力推进新一轮农村改革
- 【行走自贸区】山东自贸区济南片区:力争拿出更多首创性改革试点经验
- 怅然|华为虽好但别乱选,这三款才是极致性价比,看看哪款更让你心动
- 快科技|芯华章宣布林扬淳出任研发副总裁:世界级专家、30年EDA经验