这是我参与「第五届青训营」笔记创作活动的第13天
规则引擎实现:
词法分析:把源代码字符串转换为词法单元(Token)的过程。
- 如何识别Token:有限自动机(有限自动机就是一个状态机,它的状态数量是有限的。该状态机在任何一个状态,基于输入的字符,都能做一个确定的状态转换)
- 抽象语法树:
- 上下文无关语法:语言句子无需考虑上下文就可以判断正确性。可以用巴科斯范式(BNF)来表达
- 递归下降算法:递归下降算法就是自顶向下构造语法树,当不匹配高优先级的表达式时会下降到下一个优先级去匹配
- BNF算法工作过程:
- 先向下分解到叶子节点,再从叶子节点沿着分解时的路径/调用堆栈向上反向计算。
- 产生式优先级和在BNF树中的深度成正比。
- 叶子节点有两种,一种是不可分解的元素,一种是优先级最高的元素。
架构定义解析:
-
什么是架构:架构,又称软件架构
- 是有关软件整体结构与组件的抽象描述
- 用于指导软件系统各方面的设计
-
架构分类:
- 单机架构:All in one,所有的东西都在一个进程里,部署在一个机器上。
- 单体架构:在单机架构的基础上,将进程部署到多个机器上。
- 垂直应用架构:类似于单体架构,在单机架构基础上,将进程按照某种依据切分开。比如,A 软件和 B 软件的后端原先采用单机架构部署,那就是一个进程部署在多个机器上;如果用垂直应用架构,可以将 A 和 B 的后端拆分为 A、B 两个进程,然后再按照单体模式的思路,部署在多个机器上。
- SOA (面向服务架构):SOA 架构中,服务为一等公民,将进程按照不同的功能单元进行抽象,拆分为『服务』。有了服务之后,SOA 还为服务之间的通信定义了标准,保证各个服务之间通讯体验的一致性。
- 微服务:在 SOA 架构中,ESB 起到了至关重要的作用。但从架构拓扑来看,它更像是一个集中式的模块。有一个 SOA 分布式演进的分支,最终的形态便是微服务。
-
C10K问题:
- 所谓c10k问题,指的是:服务器如何支持10k个并发连接
- 解决C10K问题的关键就是:尽可能减少CPU等核心资源消耗,从而榨干单台服务器的性能,突破C10K问题所描述的瓶颈。
- 解决方案:同一个线程/进程同时处理多个连接即IO多路复用 。