软件应用
Redis:【内存数据库】
Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
Memcached:【内存数据库】
Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)
MongoDB:【非关系型数据库】
MonogDB是一个基于分布式文件存储的开源数据库系统。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成
OpenResty:
OpenResty是一个基于 NGINX 与 Lua 的可伸缩的高性能 Web 平台。
OpenResty 是一个强大的 Web 应用服务器,可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块。
OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型。
Lua:
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能
特性:轻量级、可扩展性
canal:
canal 是阿里巴巴 MySQL 数据库 Binlog 的增量订阅 & 消费组件。
基于日志增量订阅&消费支持的业务:1. 数据库镜像;2. 数据库实时备份;3. 多级索引(卖家和买家各自分库索引);4. 业务cache刷新;5. 关联业务变更更新
工作原理:模拟mysql slave的交互协议
Swoole:PHP协程框架
Swoole 是一个使用 C++ 语言编写的基于异步事件驱动和协程的并行网络通信引擎,为 PHP 提供协程、高性能网络编程支持;
swoole 提供了多种通信协议的网络服务器和客户端模块,可以方便快速的实现 TCP/UDP服务、高性能Web、WebSocket服务、物联网、实时通讯、游戏、微服务等
RabbitMQ:
RabbitMQ是一个在AMQP基础上实现的企业级消息系统【消息队列系统】,消息队列是“”消费-生产者模型“”的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。
Gearman:任务调度程序
Gearman是一个分发任务的程序框架,一套用来把工作委派给其他机器或者不同进程运算。它同时具备并行工作的能力、负载均衡处理的能力。
Gearman请求的处理过程涉及三个角色:Client -> job -> Worker
Elasticsearch:
Elasticsearch是一个分布式、RESTful 风格的搜索和数据分析引擎,是在 Lucene 基础上构建而成的;
Elasticsearch 索引指相互关联的文档集合。Elasticsearch 会以 JSON 文档的形式存储数据(包括文本、数字、地理空间、结构化和非结构化数据等在内的所有类型的数据),Elasticsearch 使用的是一种名为倒排索引的数据结构。
ELK Stack: Elasticsearch、Logstash 和 Kibana
Logstash:可用来对数据进行聚合和处理,并将数据发送到 Elasticsearch
Kibana:是一款适用于 Elasticsearch 的数据可视化和管理工具,可以提供实时的直方图、线形图、饼状图和地图
Yar:
Yar是一个轻量级,高校的RPC框架,它提供了一种简单方法来让PHP项目之间可以互相远程调用对方的本地方法,并且Yar也提供了并行调用的能力,可以支持同时调用多个远程服务的方法。
Yaf:
Yaf是一个高性能的PHP开发框架(C语言),采用PHP扩展实现MVC模式,也提供了Bootstrap, 路由, 分发, 视图, 插件;
互联网概念
mysql主从:
主从复制:核心部分就是两个日志(二进制日志和中继日志)以及三个线程(master的dump和slave的I/O、SQL)
主要原理:master将数据保存在二进制日志中,I/O向dump发出同步请求,dump把数据发送给I/O线程,I/O写入本地的中继日志,SOL线程读取本地中继日志数据,同步到自己数据库中,完成同步
三种模式:
异步复制:master无需关注是否有slave需要同步;【优势是性能好,缺点是数据的安全性比较差】
半同步复制:master更新操作写入binlog之后会主动通知slave,slave接收到之后写入relay log 即可应答,master只要收到至少一个ack应答,则会提交事务【优点是数据的安全性好,缺点是性能比异步复制稍低】
全同步复制:全同步复制必须收到所有从库的ack,才会提交事务;【数据一致性最好,但是性能也是最差的】
缓存分类:
分布式缓存:分布式缓存由一个服务端实现管理和控制,有多个客户端节点存储数据,可以进一步提高数据的读取速率
本地缓存:本地缓存是指将客户机本地的物理内存划分出一部分空间用来缓冲客户机回写到服务器的数据【等数据到一定阈值再回写服务器】
多级缓存:
动静分离:
动静分离其实就是将动态资源和静态资源分离处理
SOA架构:
SOA(Service-Oriented Architecture)面向服务的架构
SOA实现层面包含:面向服务的通信SOC 和 面向服务的软件架构 SOSA
微服务:
一种软件开发技术- 面向服务的体系结构(SOA)架构样式的一种变体,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API 或者 RPC)
同步与异步:
是指消息通信的机制,同步和异步就看调用方是否需要通过callback、通知或者状态来获取结果;
阻塞和非阻塞:
是指程序在等待调用结果(消息,返回值)时的状态,阻塞和非阻塞最大的区别就是看调用方线程是否会被挂起;
IO多路复用:
I/O:网络 I/O;多路:多个网络连接;复用:复用同一个线程。
IO多路复用其实就是一种同步IO模型,它实现了一个线程可以监视多个文件句柄;一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;而没有文件句柄就绪时,就会阻塞应用程序,交出cpu。
进程、线程、协程:
进程(process):程序一次动态执行的过程,是程序运行的基本单位,进程有自己独立的内存空间;具有5种状态【初始状态、执行状态、就绪状态、等待状态、停止状态】
线程(thread):线程又叫做轻量级进程,是CPU调度的最小单位,从属于进程,是进程中的实际运作单位;同一个进程的多个线程之间是共享同一份虚拟空间地址和文件描述符的;
协程(coroutine):协程又叫用户态线程,是通过协作来进行切换,其操作都是在用户态完成,创建和切换的消耗更低;
切换:内核态的线程是有操作系统进行调度,在切换线程的上下文时,要先保存上一个线程的上下文,然后执行下一个线程,当条件满足时,切换回上一个线程,并恢复上下文
协议说明
SOAP协议:简单对象访问协议
简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML的通信协议,它被设计成在WEB上的应用程序交换结构化的信息,可使应用程序在 HTTP 之上进行信息交换。
RPC协议:远程过程调用协议
远程过程调用协议是通过网络从远程计算机程序上请求服务;RPC使得程序能够像访问本地系统资源一样,去访问远端系统资源。简单的理解是一个节点请求另一个节点提供的服务:基于TCP进行远程调用,数据传输在传输层TCP层完成;主要依赖于客户端和服务端之间建立Socket链接进行;
HTTP协议:
HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上(HTTPS)
工作流程
1. 首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。
2. 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3. 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
4. 客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
TCP协议:
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议
UDP协议:
用户数据报协议(User Data Protocol):面向非连接 、传输不可靠(可能丢包)、无序、传输少量数据(数据报模式)、速度快,对系统资源的要求少,程序结构较简单
WebSocket协议:
WebSocket是一种在单个TCP连接上进行全双工通信的协议
CURL扩展:
可以基于多种应用层网络协议进行数据传输(包括上传和下载)
Socket:
对网络中不同主机上的应用进程之间进行双向通信的端点的抽象,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口