- Java219
- 数据库114
- 分布式82
- 设计81
- 框架75
- JavaCore65
- Spring64
- 工具53
- 笔记52
- 大数据32
- 分布式通信29
- 设计模式28
- Spring核心24
- 架构23
- 搜索引擎数据库22
- DevOps21
- 关系型数据库21
- 软件20
- KV数据库20
- 网络19
- Redis18
- 算法17
- MQ17
- 分布式协同16
- Elasticsearch16
- 操作系统15
- 列式数据库15
- 分布式理论15
- MySQL15
- 综合14
- 面试13
- 基础特性13
- HBase13
- 编程12
- 文档数据库12
- 中间件11
- Linux11
- IO11
- 并发11
- 其他11
- MongoDB11
- Spring数据10
- Kafka10
- Flink9
- Hive9
- JVM9
- 安全9
- 构建9
- 工作8
- 服务器8
- 编程语言8
- 解决方案8
- 分布式存储8
- SpringWeb8
- 重构7
- 分布式调度7
- 容器7
- 高级特性7
- ZooKeeper7
- Maven7
- 人工智能6
- JavaWeb6
- 网络分层6
- 网络协议6
- 分布式治理6
- 监控诊断6
- Python6
- Nginx6
- Hadoop5
- 缓存5
- 测试5
- Tomcat5
- 微服务5
- Docker5
- Elastic5
- RPC5
- UML4
- 网络技术4
- 数据库综合4
- 术4
- JavaBean4
- 模板引擎4
- ORM4
- IDE4
- SpringIO4
- Spring其他4
- Spring综合4
- Spring集成4
- 软件工程3
- 编程范式3
- 数据库中间件3
- 流量控制3
- Git3
- Kubernetes3
- RocketMQ3
- Spring安全2
- 健康1
- 器1
- 法1
📖 内容
- 如何设计系统 - 关键词:
系统设计、需求分析、顶层设计、瓶颈分析、水平扩展 - 系统架构面试总结 - 💯
- 系统架构概述 - 关键词:
架构演化、分层架构、微服务、事件驱动、微核架构 - 系统高性能架构 - 关键词:
高性能、缓存、并发模型、Reactor、负载均衡 - 系统高可用架构 - 关键词:
高可用、CAP、主从复制、限流降级熔断、失效转移 - 系统伸缩性架构 - 关键词:
伸缩性、负载均衡、集群、一致性 Hash、分库分表 - 系统扩展性架构 - 关键词:
扩展性、分层架构、SOA、微服务、消息队列 - 系统安全性架构 - 关键词:
SSO、OAuth2、RBAC、XSS、CSRF - 大型系统核心技术 - 关键词:
分布式锁、分布式 Session、分布式缓存、负载均衡、分布式存储 - 系统测试架构 - 关键词:
黑盒测试、白盒测试、单元测试、集成测试、性能测试
系统设计过程
步骤一、约束和用例
对于任何系统设计,第一件应该做的事是:阐明系统的约束并确定系统需要满足哪些用例。
永远不要假设没有明确说明的事情。一定要尽力收集、理解需求,并设计一个很好地涵盖这些要求的解决方案。
例如,URL 缩短服务可能只为几千个用户提供服务,但每个用户都可能共享数百万个 URL。它可能旨在处理对缩短的 URL 的数百万次点击或数十次点击。该服务可能必须提供有关每个缩短的 URL 的大量统计信息(这会增加您的数据大小),或者可能根本不需要统计信息。
您还必须考虑预期会发生的用例。您的系统将根据其预期功能进行设计。不要忘记确保你知道面试官一开始没有告诉你的所有要求。
扩展
- 《System Design Interview》—— Alex Xu
- 《设计数据密集型应用》(DERTA)—— Martin Kleppmann
- System Design Primer
大数据简介
移动计算
传统的软件计算处理模型,都是“输入 -> 计算 -> 输出”模型。
如何解决 PB 级数据进行计算的问题呢?
采用分布式集群的解决方案,用数千台甚至上万台计算机构建一个大数据计算处理集群,利用更多的网络带宽、内存空间、磁盘容量、CPU 核心数去进行计算处理。
大数据计算处理通常针对的是网站的存量数据,网站大数据系统要做的就是将这些统计规律和关联关系计算出来,并由此进一步改善网站的用户体验和运营决策。
将程序分发到数据所在的地方进行计算,也就是所谓的移动计算比移动数据更划算。
软件测试描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
现代软件开发项目中,分工明确,基本上都会有研发、测试、QA 等角色。不同角色由于关注的视角不同,测试目标和测试方法也不完全相同。本文主要从研发、测试的视角去考量软件测试技术。
注意:
- 为了方便,只有测试人员需要关注的测试点用【测试】标注;
- 而只有研发人员需要关注的测试点用【研发】标注;
- 都需要关注的测试点则不作标注。
概述
大数据(Big Data)是指超出传统数据库工具收集、存储、管理和分析能力的数据集。随着互联网、物联网、移动互联网的高速发展,数据量呈指数级增长,催生了以 Hadoop、Spark 为代表的新一代分布式计算技术体系。
大数据技术不仅仅是"量大的数据",更是围绕海量数据的采集→存储→处理→分析→可视化全链路的技术解决方案。
4V 特征
大数据通常由以下四个维度定义,即"4V"特征:
| 特征 | 英文 | 说明 |
|---|---|---|
| 大量 | Volume | 数据规模巨大,从 TB 级到 PB 级甚至 EB 级 |
| 高速 | Velocity | 数据生成和处理速度极快,要求实时或近实时处理 |
| 多样 | Variety | 数据类型多样,包含结构化(关系型数据库)、半结构化(JSON/XML)、非结构化(图片/视频/日志)数据 |
| 低价值密度 | Value | 海量数据中真正有价值的信息密度低,需要通过挖掘提取有价值的信息 |
大型系统的设计目标就是为了快速、高效、稳定的处理海量的数据以及高并发的请求。
单机服务受限于硬件,客观存在着资源瓶颈,难以应对不断增长的数据量和请求量,为了打破瓶颈,大型系统基本上都被设计为分布式系统。
分布式系统由于其面临的共性问题,在很多场景下的解决方案往往也存在着共性。因此,我们会发现,很多优秀的大型系统在设计方案上存在着很多的共同点。
本文主要讨论应对分布式系统共性问题的解决方案,这既可以加深对分布式系统运作原理的理解,也可以作为设计大型分布式系统时的借鉴。
分布式事务
伸缩性架构是指不需要改变系统的软硬件设计,仅通过改变部署服务器数量就可以扩大或缩小系统的服务处理能力。
系统架构的伸缩性设计
不同功能进行物理分离实现伸缩
- 纵向分离(分层后分离) - 将业务处理流程上的不同部分分离部署,实现系统伸缩性。
- 横向分离(业务分割后分离) - 将不同的业务模块分离部署,实现系统伸缩性。
单一功能通过集群规模实现伸缩
将不同功能分离部署可以实现一定程度的伸缩性,但是随着访问量逐步增加,即使分离到最小粒度的独立部署,单一的服务器也不能满足业务规模的要求。因此必须使用服务器集群,即将相同服务部署在多态服务器上构成一个集群整体对外提供服务。
关键词:XSS、CSRF、SQL 注入、DoS、消息摘要、加密算法、证书
认证
SSO
SSO(Single Sign On),即单点登录。所谓单点登录,就是同平台的诸多应用登陆一次,下一次就免登陆的功能。
SSO 需要解决多个异构系统之间的问题:
- Session 共享问题
- 跨域问题
Session 共享问题
分布式 Session 的几种实现策略: