6 计算机软件-操作系统&数据库

计算机软件是指计算机系统中的程序及其文档,是计算任务的处理对象和处理规则的描述。

  • 任何计算机执行计算的单位是任务;
  • 处理对象是数据(如数字、文字、图形、图像和声音等,他们只是表示,而无含义)或信息(数据及有关含义);
  • 处理规则指出来的动作和步骤;
  • 文档是为了便于程序所需的阐述性资料。

计算机系统是指在计算机硬件系统上运行的程序、相关文档资料和数据的集合。计算机软件用来扩充计算机系统的功能,提供计算机效率。

系统软件是为整个计算机系统配置的不依赖特定应用领域的通用软件。可以划分为:操作系统、程序设计语言翻译系统、数据库管理系统、网络软件等。

应用软件指各类应用需要或解决某个特定问题而设计的软件,如:图形图像处理软件、财务软件、游戏软件、各类软件包等。

操作系统是计算机系统的资源管理者,包含对系统软、硬件资源实施管理的一组程序,主要作用是通过CPU管理、存储管理、设备管理和文件管理对各种资源进行分配,最大限度发挥计算机的工作效率。操作系统是在计算机硬件上的第1层软件,可向下管理裸机及其中的文件,向上为其他软件(汇编程序、编译程序、数据库管理系统等)和大量应用软件提供支持,为用户提供使用系统的接口。

1 操作系统的组成

操作系统通常包括:内核(Kernel)和其他附加配套软件,包括:通信用户界面、常用应用程序(如日历、计算器、资源管理器、浏览器等)、实用程序(任务管理器、磁盘清理程序、杀毒软件和防火墙等)以及支持应用软件开发和运行的各种软件构件(如应用框架、编译器、程序库等)。

操作系统内核是能够提供进程管理(任务管理)、存储管理、文件管理和设备管理等功能的软件模块,为各种应用程序访问计算机硬件提供服务。操作系统内核对硬件设备进行了抽象,为应用提供简洁、统一接口(系统调用接口/应用程序接口API)。内核通常常驻内存,以CPU最高优先级运行,能执行指令系统中的特权指令,具有直接访问各种外设和全部主存空间的特权,负责对系统资源进行管理和分配。

2 操作系统的作用

  1. 管理计算机中运行的程序和分配各种软硬件资源。
  2. 为用户提供友善的人机界面。
  3. 为应用程序的开发和运行提供一个高效率的平台。
  4. 除上述作用外,操作系统还具有辅导用户操作(帮助功能)、处理软硬件错误、监控系统性能、保护系统安全等作用。

3 操作系统特征

  1. 并发性:指在一段时间内,宏观上有多个程序同时运行,但实际上再单CPU运行环境,每个时刻只有一个程序在执行。
  2. 共享性:指操作系统中的资源(包括硬件资源和信息资源)可以被多个并发执行的进程(线程)共同使用,而不是被一个进程所独占。共享资源的方式可以分为同时共享和互斥共享。
  3. 虚拟性:把物理上的一个实体(实际存在)变成逻辑上的多个对应物,或把物理上的多个实体变成逻辑上的一个对应物的技术(虚构假想)。采用虚拟技术的目的是为用户提供易于使用且方便高效的操作环境。把多个实体变成一个逻辑对应物,尚未实现。现在采用的都是讲大的任务分解成小任务的方式,类比Hadoop生态的方式。
  4. 不确定性:系统中的进程何时执行,如何暂停,以什么样的速度向前推进,进程总共要花多少时间才能执行完成,这些都是不可预知的。或者说进程以不确定的方式运行,其导致的直接后果是执行结果可能不唯一。

4 操作系统分类

1)批处理操作系统:分为单道批处理、多道批处理。

  • 单道批处理:一次只有一个作业装入内存执行。作业由用户程序、数据和作业说明书(作业控制语言)组成。当一个作业装入内存执行,随即自动调入同批的下一个作业,避免人员干预提高资源利用率。
  • 多道批处理:允许多个作业装入内存执行,在任意时刻,作业都处于开始点和终止点之间。每当运行中的一个作业由于输入/输出操作需要调用外部设备时,就把CPU交给另一个等待运行的作业,从而将主机与外部设备的工资由串行改为并行,避免CPU等待多道批处理的特点:多道、宏观上并行、微观上串行。

2)分时操作系统:一个计算机系统与多个终端设备连接。分时操作系统将CPU时间划分为时间片,轮流为各个终端用户服务。特点:多路性、独立性、交互性、及时性。

3)实时操作系统:实时是计算机对外来信息能够以足够快的速度进行处理,并在被控对象允许的时间范围内做出快速反应。实时系统对交互能量要求不高,但要求可靠性有保障。实时系统分为:实时控制系统、实时信息处理系统。

  • 实时控制系统:主要用于生产过程的自动控制,如:数据自动采集、武器控制、火炮自动控制、飞机自动驾驶、导弹制导系统等。
  • 实时信息处理系统:用于实时信息处理,如:飞机订票系统、情报检索系统。

4)网络操作系统:使联网计算机方便而有效地共享网络资源,为网络用户提供各种服务软件和有关协议的集合。其功能包括:高效、可靠的网络通信;对网络享资源(在LAN中有硬盘、打印机等)有效管理;提供电子邮件、文件传输、共享硬盘、打印机服务;网络安全管理;提供互操作能力。网络操作系统的特征:硬件独立性、多用户支持。

  • 硬件独立性:网络操作系统可以运行在不同网络硬件上,可以通过网桥、路由器与其他网络连接;
  • 多用户支持:能同时支持多个用户对网络访问,应对信息资源提供完全的安全和保护功能;
  • 支持玩乐高实用程序及其管理功能,如:系统备份、安全管理、容错、性能控制;
  • 多客户端支持;
  • 目录服务:以单一逻辑的方式让用户访问位于世界范围内的所有网络服务和资源的技术;
  • 多种增值服务,如:文件服务、打印服务、通信服务、数据服务等。

5)分布式操作系统:由多个分散的计算机连接而成的计算机系统,系统中的计算机无主、次之分,任意两台计算机可以通过通信交换信息。通常,为分布式计算机系统配置的操作系统称为分布式操作系统。直接对系统中的各类资源进行动态分配和调度、任务划分、信息传输协调工作,并为用户提供一个统一的界面与标准接口,用户通过这一界面实现所需要的操作和使用系统资源,是系统中若干台计算机相互协作完成共同的任务,有效控制和协调任务的并行执行。是网络操作系统的更高级形式,保持网络操作系统的全部功能,同时又有透明性、可靠性和高性能等特性。

6)微型计算机操作系统:又称微机操作系统,如:Windows、Mac OS、Linux。

7)嵌入式操作系统:在嵌入式智能设备环境中,对智能设备进行及其操作、控制的各种部件装置等资源进行统一协调、处理、指挥、控制。其特点:

  • 微型化;
  • 可定制:运行在不同的处理器平台上,能针对硬件变化进行结构与功能上的配置,以满足不同应用需要;
  • 实时性:嵌入式操作系统主要用于:过程控制、数据采集、传输通信、多媒体信息、关键要害领域需要迅速响应的场合,对实时性要求高;
  • 可靠性:系统构件、模块和体系结构必须达到应有的可靠性,对关键要害应用还要提供容错和防故障措施;
  • 易移植性:通常采用硬件抽象层(HAL,Hardware Abstraction Level)和板级支撑包(BSP,Board Support Package)的底层设计技术。

常见的嵌入式操作系统有:VxWorks、μClinux、PalmOS、WindowCE、μC/OS-II、eCos等。

数据库(DB,Database):长期存储在计算机内、有组织的、统一管理的相关数据的集合。它描述事务的数据本身,还包括事物之间的关系。

早期数据库:

  • 层次式数据库
  • 网络式数据库
  • 关系型数据库

目前的数据分为:关系型数据库和非关系型数据库。

根据存储体系分类:

  • 关系型数据库:把复杂的数据结构归结为简单的二管关系,对数据的操作建立在一个或多个关系表格上,通过这些关联的表格进行分类、合并、连接或选取等运算来实现数据库的管理。
  • 键值(Key-Value)数据库:使用简单的键值方法来存储数据,键值数据库将数据存储为键值对集合,其中键作为唯一标识符。
  • 列存储数据库:列式存储(Column-Based)与关系型数据库的行式存储(Row-Based Storage)来说,存储形式上存在差异。
  • 文档数据库:可存放并获取文档,可以是:XML、JSON、BSON等格式,这些文档具备可描述性(Self-Describing),呈现分层的树状结构(Hierarchical Tree Data Structure),可以包含映射表、集合和纯量值。文档数据库可视为其值可查的键值数据库。
  • 搜索引擎数据库:搜素引擎是应用在搜索引擎领域的数据存储形式。

1 关系数据库

数据模型:数据特征的抽象,是对数据库组织方式的一种模型化表示,是数据库系统的核心与基础。它具有数据结构、数据操作、完整性约束条件三要素。

关系:就是二维表。

1)关系数据库设计的特点及方法

数据库设计的特点

  • 从数据库结构即数据模型开始,并以数据模型为核心展开;
  • 静态结构设计与动态行为设计分离;
  • 试探性;
  • 反复性;
  • 多步性。

数据库设计方法分类,分为如下四类:

  1. 直观设计法;
  2. 规范设计法;
  3. 计算机辅助设计法;
  4. 自动化设计法。

数据库设计方法,包括:3NF的设计方法、实体关系(E-R)模型设计方法、基于视图概念的设计方法、面向对象的设计方法、计算机辅助设计方法、敏捷数据库设计方法等。

2)数据库设计步骤

数据库设计的步骤

  1. 需求分析:对象需要处理的对象进行详细调查,了解现行系统概况和确定新系统功能过程中,收集支持系统目标的基础数据及其出来方法。包括用户的数据需求、对数据业务处理的需求。
  2. 数据库概念结构设计,也称数据建模:根据需求,对用户信息加以分类、聚集和概括,建立信息模型,并依照选定的数据库管理系统软件,把它们转换为数据的逻辑结构,并依照软硬件环境,最终实现数据合理存储。最常用的方法是E-R方法。主要分为:设计局部E-R模型、设计全局E-R模型、全局E-R模型优化。
  3. 逻辑结构设计:在概念结构设计基础进行数据模型设计,可以是:层次、网状模型、关系模型。将E-R图转换为指定的数据模型,确定:完整性约束、用户视图。
  4. 物理结构设计:物理结构是数据库在物理设备上存储结构与存取方法的总称。利用DBMS的方法、技术,以较优的存储结构和路径、合理的数据存放位置以及存储分配等,实现数据库物理结构。
  5. 数据库应用设计是对DBMS的二次开发,包括:对用户信息的存储、对用户处理要求的实现。

数据库应用的设计主要包括的工作:选择设计方法、制定开发计划、选择系统架构、设计安全性策略。设计方法包括:结构化设计、面向对象设计方法。安全策略包括:硬件平台、OS、数据库系统、网络及应用系统的安全。

  1. 数据库运维:主要工作有数据库的转储和恢复,数据库的安全性、完整性控制,数据库性能监督、分析和改造,数据库重组和重构。

2 分布式数据库

分布式数据库系统(Distributed DataBase System, DDBS)是真的物理分散,而管理又需要不同程度集中管理的需求而产生的一种数据管理信息系统。满足:分布性、逻辑相关性、场地透明性、场地自治性的DBMS成为完全分布式数据库系统。

1)分布式数据库系统的特点:

  1. 数据的集中控制性;
  2. 数据独立性;
  3. 数据冗余可控性;
  4. 场地自治性;
  5. 存取有效性。

2)分布式数据库体系结构

分布式数据库体系结构

3 常用数据库管理系统

1)Oracle:适用于大型、中型和微型计算机关系数据库管理系统。主要结构包括:内部结构、外部存储结构、内存结构、进程结构,包括:物理上的数据、处理这些数据的程序,即 DBMS 本身。Oracle 使用 PL/SQL(Procedural Language/SQL)语言执行各种操作。Oracle 8 以上版本开始支持面向对象的结构(如抽象数据类型)。Oracle 产品包括数据库服务器、开发工具、数据库连接产品等,一并提供工具,如 Export/Import、数据泵等。

2)IBM DB2:IBM的大型关系型数据库平台,支持多用户。

核心特色:

  • 支持面向对象编程
  • 支持多媒体应用程序
  • 支持备份恢复
  • 支持存储过程/触发器
  • 支持 SQL 查询
  • 支持异构分布式数据库访问
  • 支持数据复制

DB2 采用多进程多线索体系结构,可运行于多种OS上。还提供Visualizer、Visualage、Visualgen等开发工具。

3)Sysbase:SYBASE公司的 Client/Server(C/S)结构关系数据库系统,世界首个 C/S RDBMS。

Sybase主要包括:

  • 进行数据库管理和维护的联机关系数据库管理系统 Sybase SQL Server
  • 支持数据库应用系统建立与开发的前端组件 Sybase SQLToolset
  • 可把异构环境下其他厂商应用软件和任何类型数据连接在一起的接口 Sybase OpenClient/OpenServer.

Sybase还提供如下工具:

  • Sybase Adaptive Server Enterprise,高性能企业智能型关系数据库管理系统
  • EAServer 电子商务解决方案应用服务器
  • PowerDesigner 系统分析设计工具
  • PowerBuilder 应用开发工具

4)Microsoft SQL Server:典型关系型数据库管理系统,运行于多OS,使用 Transact-SQL 语言完成数据操作。主要包括如下服务组件:

  • Open Data Services
  • MS SQL Server
  • SQL Server Agent
  • Microsoft Distributed Transaction Coordinator

SQL Server 还包括以下工具:

  • 关系型数据库
  • 复制服务
  • 通知服务
  • 集成服务
  • 分析服务
  • 报表服务
  • 管理工具
  • 开发工具

4 大型数据库管理系统的特点

共有7大特点:

  1. 基于网络环境的数据库管理系统;
  2. 支持大规模应用。支持高并发、海量事务、海量数据、海量数据存储。
  3. 提供自动锁功能使得并发用户可以安全高效地访问数据。
  4. 可以保证系统的高度安全性。
  5. 提供方便而灵活的数据备份、恢复方法及设备镜像功能,苛可以利用操作系统提供的容错功能,确保设计良好的应用中的数据在发生意外情况下能最大限度地恢复。
  6. 提供多种维护数据完整性的手段。
  7. 提供方便易用的分布式处理功能。

做了 5 年运维,靠着这份监控知识体系,我从 3K 变成了40K | 原力计划

作者 | CSDN博主

责编 | 夕颜

出品 | CSDN(ID:CSDNnews)

从来没讲过运维,因为我觉得运维这种东西不需要太多的知识面,然后我一个做了运维朋友告诉我大错特错,他就是从3K的运维一步步到40K的,甚至笑着说:我现在感觉自己什么都能做。

既然讲,就讲最重要的吧。

监控是整个运维乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供详实的数据用于追查定位问题。目前业界有很多不错的开源产品可供选择。选择一款开源的监控系统,是一个省时省力、效率最高的方案。当然,对监控不是很明白的朋友们,看了以下文章可能会对监控整个体系有比较深刻的认识。

监控目标

每个人由于所在的行业、公司、业务、岗位不同,对监控的理解也不尽相同,但是我们需要注意,监控是需要站在公司的业务角度去考虑,而不是针对某个监控技术的使用。

  1. 对系统不间断的实时监控:实际上是对系统不间断的实时监控(这就是监控);

  2. 实时反馈系统当前状态:我们监控某个硬件、或者某个系统,都是需要能实时看到当前系统的状态,是正常、异常、或者故障。

  3. 保证服务可靠性安全性:我们监控的目的就是要保证系统、服务、业务正常运行

  4. 保证业务持续稳定运行:如果我们的监控做得很完善,即使出现故障,能第一时间接收到故障报警,在第一时间处理解决,从而保证业务持续性的稳定运行。

监控方法

1.了解监控对象:我们要监控的对象你是否了解呢?比如CPU到底是如何工作的?

2.性能基准指标:我们要监控这个东西的什么属性?比如CPU的使用率、负载、用户态、内核态、上下文切换。

3.报警阈值定义:怎么样才算是故障,要报警呢?比如CPU的负载到底多少算高,用户态、内核态分别跑多少算高?

4.故障处理流程:收到了故障报警,我们怎么处理呢?有什么更高效的处理流程吗?

监控核心

  • 发现问题:当系统发生故障报警,我们会收到故障报警的信息。

  • 定位问题:故障邮件一般都会写某某主机故障、具体故障的内容,我们需要对报警内容进行分析。比如一台服务器连不上,我们就需要考虑是网络问题、还是负载太高导致长时间无法连接,又或者某开发触发了防火墙禁止的相关策略等,我们就需要去分析故障具体原因。

  • 解决问题:当然我们了解到故障的原因后,就需要通过故障解决的优先级去解决该故障。

  • 总结问题:当我们解决完重大故障后,需要对故障原因以及防范进行总结归纳,避免以后重复出现。

监控工具

下面我们需要选择一款适合公司业务的监控工具进行监控,。这里我对监控工具进行了简单的分类。

1、老牌监控

  • MRTG(Multi Route Trffic Grapher)是一套可用来绘制网络流量图的软件,由瑞士奥尔滕的Tobias Oetiker与Dave Rand所开发,以GPL授权。MRTG最好的版本是1995年推出的,用Perl语言写成,可跨平台使用,数据采集用SNMP协议,MRTG将手机到的数据通过Web页面以GIF或者PNG格式绘制出图像。

  • Ganglia是一个跨平台的、可扩展的、高性能的分布式监控系统,如集群和网格。它基于分层设计,使用广泛的技术,用RRDtool存储数据。具有可视化界面,适合对集群系统的自动化监控。其精心设计的数据结构和算法使得监控端到被监控端的连接开销非常低。目前已有成千上万的集群正在使用这个监控系统,可以轻松地处理2000个节点的集群环境。

  • Cacti(英文含义为仙人掌)是一套基于PHP、MySQL、SNMP和RRDtool开发的网络流量监测图形分析工具,它通过snmpget来获取数据使用RRDtool绘图,但使用者无须了解RRDtool复杂的参数。提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、主机设备以及任何一张图,还可以与LDAP结合进行用户认证,同时也能自定义模板。在历史数据展示监控方面,其功能相当不错。Cacti通过添加模板,使不同设备的监控添加具有可复用性,并且具备可自定义绘图的功能,具有强大的运算能力(数据的叠加功能)

  • Nagios是一个企业级监控系统,可监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机状态以及服务,同时提供异常告警通知功能等。Nagios可运行在Linux和UNIX平台上。同时提供Web界面,以方便系统管理人员查看网络状态、各种系统问题、以及系统相关日志等。Nagios的功能侧重于监控服务的可用性,能根据监控指标状态触发告警。目前Nagios也占领了一定的市场份额,不过Nagios并没有与时俱进,已经不能满足于多变的监控需求,架构的扩展性和使用的便捷性有待增强,其高级功能集成在商业版Nagios XI中。

  • Smokeping主要用于监视网络性能,包括常规的ping、www服务器性能、DNS查询性能、SSH性能等。底层也是用RRDtool做支持,特点是绘制图非常漂亮,网络丢包和延迟用颜色和阴影来标示,支持将多张图叠放在一起,其作者还开发了MRTG和RRDtll等工具。Smokeping的站点为:http://tobi.oetiker.cn/hp。

  • 开源监控系统OpenTSDB用HBase存储所有时序(无须采样)的数据,来构建一个分布式、可伸缩的时间序列数据库。它支持秒级数据采集,支持永久存储,可以做容量规划,并很容易地接入到现有的告警系统里。OpenTSDB可以从大规模的集群(包括集群中的网络设备、操作系统、应用程序)中获取相应的采集指标,并进行存储、索引和服务,从而使这些数据更容易让人理解,如Web化、图形化等。

2、王牌监控

  • Zabbix是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的Agent代理,也支持SNMP、IPMI、JMX、Telnet、SSH等多种协议,它将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警。其灵活的扩展性和丰富的功能是其他监控系统所不能比的。相对来说,它的总体功能做得非常优秀。从以上各种监控系统的对比来看,Zabbix都是具有优势的,其丰富的功能、可扩展的能力、二次开发的能力和简单易用的特点,读者只要稍加学习,即可构建自己的监控系统。

  • 小米的监控系统:Open-Falcon。Open-Falcon的目标是做最开放、最好用的互联网企业级监控产品。

3、三方监控

现在市场上有很多不错的第三方监控,比如:监控宝、监控易、听云、还有很多云厂商自带监控,但在这里我不打算着重介绍,如果想了解三方监控可自行上官网咨询。(避免说广告植入)

监控流程

上面介绍了这么多,到底选择什么监控工具最合适呢?我这里推荐几款开源监控工具:Zabbix、Open-Falcon、LEPUS天兔(专用于监控数据库)。但本文还是基于Zabbix来构建整个监控体系生态圈。下面我们就来聊聊Zabbix的整个流程:

  1. 数据采集:Zabbix通过SNMP、Agent、ICMP、SSH、IPMI等对系统进行数据采集;

  2. 数据存储:Zabbix存储在MySQL上,也可以存储在其他数据库服务;

  3. 数据分析:当我们事后需要复盘分析故障时,Zabbix能给我们提供图形以及时间等相关信息,方面我们确定故障所在;

  4. 数据展示:Web界面展示、(移动APP、java_php开发一个Web界面也可以);

  5. 监控报警:电话报警、邮件报警、微信报警、短信报警、报警升级机制等(无论什么报警都可以);

  6. 报警处理:当接收到报警,我们需要根据故障的级别进行处理,比如:重要紧急、重要不紧急,等。根据故障的级别,配合相关的人员进行快速处理。

监控指标

上面了解了监控方法、目标、流程、也了解了监控有哪些工具,可能有人会疑惑,我们具体要监控些什么东西,在这里我进行了分类整理,包含硬件监控、系统监控、应用监控、网络监控、流量分析、日志监控、安全监控、API监控、性能监控、业务监控。

1、硬件监控

早期我们通过机房巡检的方式,查看硬件设备灯光闪烁情况判断是否故障,这样非常浪费人力,并且是重复性无技术含量的工作,大家懂得。

当然我们现在可以通过IPMI对硬件详细情况进行监控,并对CPU、内存、磁盘、温度、风扇、电压等设置报警设置报警阈值(自行对监控报警内容编写合理的报警范围) 。

IPMI监控硬件服务参考资料:Zabbix IPMI Interface

2、系统监控

中小型企业基本全是Linux服务器,那么我们肯定是要监控起系统资源的使用情况,系统监控是监控体系的基础。

监控主要对象:

CPU有几个重要的概念:上下文切换、运行队列和使用率。这也是我们CPU监控的几个重点指标。

通常情况,每个处理器的运行队列不要高于3,CPU 利用率中用“户态/内核态”比例维持在70/30,空闲状态维持在50%,上下文切换要根据系统繁忙程度来综合考量。

针对CPU常用的工具有:htop、top、vmstat、mpstat、dstat、glances。Zabbix提供系统监控模板:Zabbix Agent Interface。

CPU整体状态

上下文切换

负载状态

内存:通常我们需要监控内存的使用率、SWAP使用率、同时可以通过Zabbix描绘内存使用率的曲线图形发现某服务内存溢出等。

针对内存常用的工具有:free、top、vmstat、glances。

内存使用率

IO分为磁盘IO和网络IO。除了在做性能调优我们要监控更详细的数据外,日常监控只关注磁盘使用率、磁盘吞吐量、磁盘写入繁忙程度,网络也是监控网卡流量即可。常用工具有:iostat、iotop、df、iftop、sar、glances。

磁盘使用率

磁盘读/写吞吐

网卡进出口流量

TCP11种状态信息

其它系统监控还有运行的进程端口、进程数、登陆用户、Open File等。

其它相关监控

3、应用监控

把硬件监控和系统监控研究明白后,我们进一步操作是需要登陆到服务器上查看服务器运行了哪些服务,都需要监控起来。

应用服务监控也是监控体系中比较重要的内容,例如:LVS、HAProxy、Docker、Nginx、PHP、Memcached、Redis、MySQL、RabbitMQ等,相关的服务都需要使用zabbix监控起来。

nginx_status

PHP-FPM_status

Redis_status

JVM监控

笔者之前写过服务监控详细的操作过程,这里就不一一展示,详情访问:Zabbix监控各种应用服务。

  • Zabbix提供应用服务监控:Zabbix Agent UserParameter

  • Zabbix提供的Java监控:Zabbix JMX Interface

  • Percona提供MySQL数据库监控:percona-monitoring-plulgins

4、网络监控

作为一个针对全国用户的电商网站,时刻掌握各地到机房的网络状态也是必须的。

网络监控是我们构建监控平台是必须要考虑的,尤其是针对有多个机房的场景,各个机房之间的网络状态,机房和全国各地的网络状态都是我们需要重点关注的对象,那如何掌握这些状态信息呢?我们需要借助于网络监控工具Smokeping。

Smokeping 是rrdtool的作者Tobi Oetiker的作品,是用Perl写的,主要是监视网络性能,www服务器性能,DNS查询性能等,使用rrdtool绘图,而且支持分布式,直接从多个agent进行数据的汇总。

同时,由于自己监控点比较少,还可以借助很多商业的监控工具,比如监控宝、基调、博瑞等。同时这些服务提供商还可以帮助你监控CDN的状态。

监控宝

5、流量分析

网站流量分析对于运维人员来说,更是一门必须掌握的知识了。比如对于一家电商公司来说:通过对订单来源的统计和分析,可以了解我们在某个网站上的广告投入有没有收到预期的效果。可以区分不同地区的访问人数、甚至商品交易额等。百度统计、Google分析、站长工具等,只需要在页面嵌入一个js即可。

但是,数据始终是在对方手中,个性化定制不方便,于是Google出一个叫Piwik的开源分析工具。

piwik

百度统计

6、日志监控

通常情况下,随着系统的运行,操作系统会产生系统日志,应用程序会产生应用程序的访问日志、错误日志,运行日志,网络日志,我们可以使用ELK来进行日志监控。

对于日志监控来说,最见的需求就是收集、存储、查询、展示,开源社区正好有相对应的开源项目:Logstash(收集)+ElasticSearch(存储+搜索)+Kibana(展示)。

我们将这三个组合起来的技术称之为ELK Stack,所以说ELK Stack指的是Elasticsearch、Logstash、Kibana技术栈的结合。

如果收集了日志信息,部署更新有异常出现,可以立即在Kibana上看到。

ELK日志展示

当然也可以通过Zabbix过滤错误日志来进行告警。

Zabbix日志展示

7、安全监控

虽然Linux开源的安全产品不少,比如四层iptables,七层WEB防护Nginx+Lua实现WAF,最后将相关的日志都收至ELkstack,通过图形化进行不同的攻击类型展示。但是始终是一件比较耗费时间,并且个人效果并不是很好。这个时候我们可以选择接入第三方服务厂商。

某某三方安全

三方厂商提供全面的漏洞库,涵盖服务、后门、数据库、配置检测、CGI、SMTP等多种类型。

全面检测主机、Web应用漏洞自主挖掘和行业共享相结合第一时间更新0-day漏洞,杜绝最新安全隐患。

8、API监控

由于API变得越来越重要,很显然我们也需要这样的数据来分辨我们提供的 API是否能够正常运作。

监控API接口GET、POST、PUT、DELETE、HEAD、OPTIONS的请求。可用性、正确性、响应时间为三大重性能指标。

API监控

响应时间

9、性能监控

全面监控网页性能,DNS响应时间、HTTP建立连接时间、页面性能指数、响应时间、可用率、元素大小等。Zabbix提供URL监控:Zabbix Web 监控。

Zabbix站点监控

终端响应时间

第三方监控监控大盘。各类图表一目了然,全面体现网页性能健康状况。

10、业务监控

没有业务指标监控的监控平台,不是一个完善的监控平台,通常在我们的监控系统中,必须将我们重要的业务指标进行监控,并设置阈值进行告警通知。比如电商行业:

每分钟产生多少订单、每分钟注册多少用户、每天有多少活跃用户、每天有多少推广活动、推广活动引入多少用户、推广活动引入多少流量、推广活动引入多少利润等,重要指标都可以加入Zabbix上,然后通过Screen展示。

注:由于业务监控图表,涉及到隐私的数据太多,就不截图了。

监控报警

故障报警通知的方式有很多种,当然最常用的还是短信和邮件。

短信报警

邮件报警

报警处理

一般报警后故障如何处理,首先我们可以通过告警升级机制先自动处理,比如Nginx服务down了,可以设置告警升级自动启动Nginx。

但是如果一般业务出现了严重故障,我们通常根据故障的级别、业务,来指派不同的运维人员进行处理。

当然不同业务形态、不同架构、不同服务可能采用的方式都不同,这个没有一个固定的模式套用。

面试监控

在运维面试中,常常会被问题监控相关的问题,这个问题到底该如何来回答,我针对本文给大家提供了一个简单的回答思路

1、硬件监控

通过SNMP来进行路由器交换机的监控(这些可以跟一些厂商沟通来了解如何做)、服务器的温度以及其它,可以通过IPMI来实现。当然如果没有硬件全都是云,直接跳过这一步骤。

2、系统监控

如CPU的负载,上下文切换、内存使用率、磁盘读写、磁盘使用率、磁盘inode使用率。当然这些都是需要配置触发器,因为默认太低会频繁报警。

3、服务监控

比如公司用的LNMP架构,Nginx自带Status模块、PHP也有相关的Status、MySQL的话可以通过Percona官方工具来进行监控。Redis这些通过自身的info获取信息进行过滤等。方法都类似。要么服务自带。要么通过脚本来实现想监控的内容,以及报警和图形功能。

4、网络监控

如果是云主机又不是跨机房,那么可以选择不监控网络。当然你说我们是跨机房以及如何如何,推荐使用smokeping来做网络相关的监控,或者直接交给你们的网络工程师来做,因为术业有专攻。

5、安全监控

如果是云主机可以考虑使用自带的安全防护。当然也可以使用iptables。如果是硬件,那么推荐使用硬件防火墙。使用云可以购买防DDOS,避免出现故障导致down机一天。如果是系统,那么权限、密码、备份、恢复等基础方案要做好。Web同时也可以使用Nginx+Lua来实现一个Web层面的防火墙。当然也可以使用集成好的OpenResty。

6、Web监控

Web监控的话题其实还是很多。比如可以使用自带的Web监控来监控页面相关的延迟、js响应时间、下载时间、等等。这里我推荐使用专业的商业软件监控宝或听云来实现。毕竟人家全国各地都有机房(如果本身是多机房那就另说了)。

7、日志监控

如果是Web的话可以使用监控Nginx的50x、40x的错误日志,PHP的ERROR日志。其实这些需求无非是,收集、存储、查询、展示,我们其实可以使用开源的ELKStack来实现。Logstash(收集)、Elasticsearch(存储+搜索)、Kibana(展示)。

8、业务监控

上面做了那么多,其实最终还是保证业务的运行。这样我们做的监控才有意义。所以业务层面这块的监控需要和开发以及总监开会讨论,监控比较重要的业务指标,(需要开会确认)然后通过简单的脚本就可以实现,最后设置触发器即可 。

9、流量分析

平时我们分析日志都是拿awk sed xxx一堆工具来实现。这样对我们统计IP、PV、UV不是很方便。那么可以使用百度统计、Google统计、商业,让开发嵌入代码即可。为了避免隐私也可以使用Piwik来做相关的流量分析。

10、可视化

通过Screen以及引入一些第三方的库来美化界面,同时我们也需要知道,订单量突然增加、突然减少。或者说突然来了一大波流量,这流量从哪儿来,是不是推广了,还是被攻击了。可以结合监控平来梳理各个系统之间的业务关系。

11、自动化监控

如上我们做了那么多的工作,当然不能是一台一台的来加key实现。可以通过Zabbix的主动模式以及被动模式来实现。当然最好还是通过API来实现。

总结

真正想做到更完整的监控体系,目前的开源软件确实无法很好地满足,有条件的公司都开始自己开发自己的监控系统,比如小米开源的Open-Falcon。

也有比较好的开源的监控框架如Sensu等,再加上InfluxDB、Grafana可以用来定制符合自己企业的监控平台。

原文链接:

https://blog.csdn.net/yuanziok/article/details/104424369

每个软件工程师都应该知道的 10 种数据库

概述:在当今世界,数据无处不在。我们每天产生大量数据,并且呈指数级增长。根据最近的一项研究,预计全球创建、捕获、复制和消费的数据总量将迅速增加,到 2024 年将达到 149 泽字节。管理和组织这些数据的重要性对企业和组织来说至关重要。这就是数据库的用武之地。数据库是一种软件系统,可以存储、组织和检索大量数据,使企业和组织更容易有效地管理其信息。它们提供了一种结构化的方式来存储可以轻松访问、更新和分析的数据。有许多不同类型的数据库,每种数据库都有自己的优点和缺点。在本文中,我们将向您介绍 10 种最常见的数据库类型,解释它们是什么、它们如何工作以及它们最适合什么。无论您是软件工程师、数据分析师还是企

在当今世界,数据无处不在。我们每天产生大量数据,并且呈指数级增长。根据最近的一项研究,预计全球创建、捕获、复制和消费的数据总量将迅速增加,到 2024 年将达到 149 泽字节。管理和组织这些数据的重要性对企业和组织来说至关重要。

这就是数据库的用武之地。数据库是一种软件系统,可以存储、组织和检索大量数据,使企业和组织更容易有效地管理其信息。它们提供了一种结构化的方式来存储可以轻松访问、更新和分析的数据。

有许多不同类型的数据库,每种数据库都有自己的优点和缺点。在本文中,我们将向您介绍 10 种最常见的数据库类型,解释它们是什么、它们如何工作以及它们最适合什么。

无论您是软件工程师、数据分析师还是企业主,了解可用的不同类型的数据库都可以帮助您就如何存储和管理数据做出更好的决策。通过选择适合您需求的数据库,您可以提高应用程序的性能和可伸缩性,更好地利用资源,并从数据中获得有价值的见解。

因此,让我们深入了解并探索数据库的世界。

关系数据库是当今最常用的数据库类型。它们将数据组织到表中,每个表由一组行和列组成。列表示数据的不同属性或字段,而行表示数据的单个记录或实例。

关系数据库使用结构化查询语言 (SQL) 来访问和操作数据。SQL 允许用户从一个或多个表中检索数据,对数据执行计算和聚合,以及更新或删除表中的数据。

优点

关系数据库的主要优势之一是它们能够通过使用约束和关系来强制执行数据完整性和一致性。约束是限制可输入到表中的值的规则,而关系则定义表之间的连接方式。这些功能有助于确保数据准确可靠,这对企业和组织至关重要。

关系数据库非常适合处理结构化数据,例如财务记录、和库存数据。它们广泛用于业务应用程序,例如企业资源规划 (ERP) 系统、客户关系管理 (CRM) 系统和人力资源管理 (HRM) 系统。

缺点

但是,关系数据库在处理非结构化数据(如图像、视频和社交媒体帖子)方面可能不太有效。他们也可能难以处理具有复杂关系的数据,例如社交网络或供应链。

尽管存在这些局限性,但关系数据库仍然是一种功能强大且广泛使用的数据管理工具。通过了解它们的优势和劣势,您可以更好地决定何时使用它们以及如何根据您的需求优化它们的性能。

SQL 数据库的示例包括 MySQL、Oracle 和 Microsoft SQL Server。

NoSQL数据库,顾名思义,就是不使用关系数据库使用的结构化查询语言(SQL)的数据库。相反,它们使用各种不同的数据模型(例如键值对、文档或图形)来存储和组织数据。与关系数据库不同,NoSQL 数据库可以处理非结构化和半结构化数据,例如社交媒体帖子、传感器数据或机器日志。它们具有高度可扩展性,可以处理分布在多个服务器上的大量数据。

NoSQL 数据库通常用于大数据应用程序,例如实时分析、内容管理和电子商务。它们在 Web 和移动应用程序中也很受欢迎,它们可以处理大量高并发性数据。例如,当像 Twitter 这样的流行社交媒体平台每秒处理数百万条推文时,不可能将所有这些数据存储在一个数据库中。NoSQL 数据库允许平台在多个数据库之间分发数据,从而可以处理高吞吐量和并发性。

优点

NoSQL 数据库被设计为高可用性,这意味着即使在硬件或软件故障的情况下,它们也可以继续运行。它们还可以具有高性能,提供比关系数据库更快的读取和写入速度。这使它们成为需要低延迟的实时应用程序(例如在线游戏或金融交易平台)的不错选择。

缺点

但是,NoSQL 数据库在处理数据之间的复杂关系(例如供应链或社交网络中的数据)方面可能不太有效。它们还可能缺乏关系数据库的数据一致性和完整性功能,这可能导致数据质量问题。这是因为 NoSQL 数据库优先考虑可用性和可伸缩性,而不是一致性。换句话说,他们可能愿意牺牲某种程度的一致性来保持高可用性和可伸缩性。

尽管存在这些局限性,但 NoSQL 数据库已成为管理现代应用程序中数据的越来越重要的工具。通过了解它们的优势和劣势,您可以更好地决定何时使用它们以及如何根据您的需求优化它们的性能。如果您正在处理大量非结构化或半结构化数据,NoSQL 数据库可以成为管理和组织数据的强大工具。

NoSQL 的示例包括 MongoDB、Cassandra、Amazon DynamoDB、Couchbase、Redis、Apache HBase。

面向对象数据库 (OODB) 是以面向对象格式存储数据的数据库。这意味着数据存储为对象,其中可以包含数据和行为。OODB 旨在处理复杂的数据结构和关系,使其成为处理高度互连数据的应用程序的理想选择。

在 OODB 中,数据存储为对象,这些对象是在数据库架构中定义的类的实例。每个对象都有自己唯一的标识,用于检索和操作对象。对象可以包含存储数据的属性和定义行为的方法。这允许在数据库中对复杂的数据结构和关系进行建模。

优点

OODB 的主要优势之一是它们能够处理复杂的数据结构和关系。它们特别适用于处理面向对象数据的应用程序,例如软件开发、计算机辅助设计和科学研究。OODB 也可以比关系数据库更灵活,因为它们不需要固定的架构。这使它们成为需要处理不断变化的数据结构或需要频繁更新架构的应用程序的不错选择。

缺点

但是,OODB 在处理简单的数据结构(例如财务记录或库存数据中的数据结构)时可能不太有效。对于某些类型的查询,它们的效率也可能低于关系数据库,因为面向对象的格式可能会使优化查询的性能变得更加困难。

尽管存在这些局限性,OODB 仍然是管理复杂面向对象数据的强大工具。通过了解它们的优势和劣势,您可以更好地决定何时使用它们以及如何根据您的需求优化它们的性能。

OO 数据库的示例包括 Objectivity、Versant 和 ObjectDB。

图形数据库是以节点和边的形式存储数据的数据库,用于表示数据之间的关系。它们旨在处理数据之间的复杂关系,使其成为处理高度互连数据的应用程序的理想选择。

在图形数据库中,数据存储为表示实体的节点和表示实体之间关系的边。节点可以具有存储数据的属性,边可以具有描述节点之间关系的标签。这允许在数据库中对数据之间的复杂关系进行建模。

优点

图形数据库的主要优势之一是它们能够处理数据之间的复杂关系。它们特别适用于处理网络数据的应用程序,例如社交网络、物流网络和供应链。对于某些类型的查询,图形数据库也比关系数据库更有效,因为图形结构可以更轻松地遍历数据之间的关系。

缺点

但是,图形数据库在处理简单的数据结构(例如财务记录或库存数据中的数据结构)时可能不太有效。它们也可能不如关系数据库灵活,因为它们需要固定的架构。这可能会使处理更改的数据结构或对架构执行频繁更新变得困难。

尽管存在这些局限性,但图形数据库仍然是管理复杂、互连数据的强大工具。通过了解它们的优势和劣势,您可以更好地决定何时使用它们以及如何根据您的需求优化它们的性能。

图形数据库的示例包括 Neo4j、Amazon Neptune 和 Microsoft Azure Cosmos DB。

时序数据库是针对存储和检索时序数据而优化的数据库,时序数据是随时间推移记录的数据。这种类型的数据常见于金融、物联网和监控系统等应用中。

时序数据库旨在处理大量带时间戳的数据,并提供对这些数据的快速高效访问。它们通常使用列式存储格式,允许对大型数据集进行快速读取和写入操作。它们还经常使用专门的查询语言和索引技术来实现对时间序列数据的高效查询和分析。

优点

时间序列数据库的主要优势之一是它们能够有效地处理大量带时间戳的数据。它们可用于存储和分析来自各种来源的数据,例如传感器、日志和社交媒体源。它们特别适用于需要实时分析时间序列数据的应用,例如金融交易系统或天气预报。

时序数据库还具有高度可伸缩性,因为它们可以跨多个服务器进行分区以处理大量数据。这使得它们成为需要处理大量数据或需要高可用性的应用程序的理想选择。

缺点

但是,时间序列数据库在处理数据之间的复杂关系(例如供应链或社交网络中的数据)方面可能不太有效。与其他类型的数据库相比,它们的灵活性也可能较低,因为它们针对时间序列数据进行了优化,可能不太适合其他类型的数据。

尽管存在这些限制,但时序数据库是管理和分析时序数据的强大工具。通过了解它们的优势和劣势,您可以更好地决定何时使用它们以及如何根据您的需求优化它们的性能。

时序数据库示例包括 InfluxDB、TimescaleDB 和 OpenTSDB。

列族数据库是将数据组织到列族中的数据库,列族是存储在一起的列组。这样可以有效地检索经常一起访问的数据。

在列族数据库中,数据被组织成行,每行由多个列族组成。每个列族可以包含多个列,每个列包含一段特定的数据。这允许灵活的数据建模,因为不同的行可以具有不同的列族和列。

优点

列族数据库的主要优势之一是它们能够有效地处理大量数据。它们特别适用于需要对大型数据集进行快速读写操作的应用程序,例如内容管理系统或实时分析应用程序。

列族数据库还具有高度可伸缩性,因为它们可以跨多个服务器进行分区以处理大量数据。这使得它们成为需要处理大量数据或需要高可用性的应用程序的理想选择。

缺点

但是,列族数据库在处理数据之间的复杂关系(例如社交网络或供应链中的数据)方面可能不太有效。与其他类型的数据库相比,它们的灵活性也可能较低,因为它们针对列族数据进行了优化,可能不太适合其他类型的数据。

尽管存在这些限制,但列族数据库是管理和分析大型数据集的强大工具。通过了解它们的优势和劣势,您可以更好地决定何时使用它们以及如何根据您的需求优化它们的性能。

列系列数据库的示例包括 Apache Cassandra、HBase 和 Amazon Keyspaces。

空间数据库是专门用于空间数据的存储、组织和检索的数据库。空间数据是指与特定位置或地理区域关联的数据,例如地图、卫星图像或 GPS 数据。

空间数据库旨在处理复杂的空间数据结构,例如面、点和线。它们使用专门的索引技术和查询语言来实现对空间数据的高效查询和分析。

优点

空间数据库的主要优势之一是它们能够有效地处理大量空间数据。它们可用于存储和分析来自各种来源的数据,例如天气数据、人口统计数据和交通数据。它们特别适用于需要空间分析的应用,例如城市规划、应急管理和环境监测。

空间数据库还具有高度可伸缩性,因为它们可以跨多个服务器进行分区以处理大量数据。这使得它们成为需要处理大量空间数据或需要高可用性的应用程序的理想选择。

缺点

但是,空间数据库在处理非空间数据或处理数据之间的复杂关系方面可能不太有效。它们也可能不如其他类型的数据库灵活,因为它们针对空间数据进行了优化,可能不太适合其他类型的数据。

尽管存在这些限制,但空间数据库仍是管理和分析空间数据的强大工具。通过了解它们的优势和劣势,您可以更好地决定何时使用它们以及如何根据您的需求优化它们的性能。

空间数据库的示例包括 PostGIS、MongoDB 和 Elasticsearch。

面向文档的数据库是以文档形式存储数据的数据库,可以将其视为自包含的数据单元。每个文档都包含表示单个实体或对象所需的所有信息,并且可以以灵活的无架构格式存储。

在面向文档的数据库中,数据存储为文档,文档可以包含多种数据类型,包括字符串、数字、数组和子文档。文档可以是嵌套和分层的,允许在数据库中对复杂的数据结构进行建模。

优点

面向文档的数据库的主要优势之一是其灵活性和可伸缩性。它们旨在处理非结构化和半结构化数据,例如社交媒体帖子、文档和电子邮件。它们还可以处理分布在多个服务器上的大量数据,使其成为大数据应用程序的理想选择。

面向文档的数据库通常用于 Web 和移动应用程序,因为它们可以处理这些应用程序中常见的灵活数据结构和半结构化数据。它们还用于内容管理系统和电子商务平台,在这些平台中,它们可以处理大量高并发的数据。

缺点

然而,面向文档的数据库在处理数据之间的复杂关系(例如社交网络或供应链中的数据)方面可能不太有效。它们还可能缺乏关系数据库的数据一致性和完整性功能,这可能导致数据质量问题。这是因为面向文档的数据库优先考虑灵活性和可伸缩性,而不是一致性。

尽管存在这些局限性,但面向文档的数据库仍然是管理非结构化和半结构化数据的强大工具。通过了解它们的优势和劣势,您可以更好地决定何时使用它们以及如何根据您的需求优化它们的性能。如果您正在处理大量非结构化或半结构化数据,面向文档的数据库可以成为管理和组织数据的强大工具。

面向文档的数据库供应商的示例是 MongoDB。

顾名思义,内存数据库是主要将数据存储在内存中而不是磁盘上的数据库。这允许极快的读取和写入速度,使其成为需要低延迟和高吞吐量的应用程序的理想选择。

内存数据库通常用于需要实时处理数据的应用程序,例如金融交易系统或在线游戏平台。它们还可用于需要高速数据处理的应用,例如图像或视频处理。

优点

内存数据库的主要优势之一是它们的速度。由于数据存储在内存中,因此读取和写入操作的执行速度比基于磁盘的数据库快得多。这使得它们非常适合需要实时处理数据的应用程序。内存数据库还可以高度可扩展,因为它们可以分布在多个服务器上以处理大量数据。

缺点

但是,内存数据库在处理大量数据方面可能不太有效,因为内存通常比磁盘存储更昂贵。它们的持久性也可能不如基于磁盘的数据库,因为如果系统崩溃或断电,数据就会丢失。

尽管存在这些限制,内存数据库仍可以成为实时管理和分析数据的强大工具。通过了解它们的优势和劣势,您可以更好地决定何时使用它们以及如何根据您的需求优化它们的性能。

内存数据库供应商的示例是 Apache Ignite。

NewSQL数据库是一种相对较新的数据库类型,它结合了NoSQL数据库的可扩展性和性能,以及传统关系数据库的数据一致性和完整性。它们旨在处理大量数据和高并发性,同时保持 ACID(原子性、一致性、隔离性和持久性)保证。

NewSQL 数据库使用各种不同的架构和数据模型,但它们都专注于可伸缩性、性能和数据一致性。它们通常使用分布式架构,允许跨多个服务器存储和处理数据,从而提供高水平的可扩展性和可用性。

优点

NewSQL 数据库的主要优势之一是它们能够处理复杂的数据结构和关系,同时提供强大的数据一致性和完整性保证。它们非常适合需要高并发性的应用程序,例如金融交易系统或实时分析应用程序。

NewSQL 数据库还具有高度可扩展性,因为它们可以分布在多个服务器上以处理大量数据。这使得它们成为需要处理大量数据或需要高可用性的应用程序的理想选择。

缺点

但是,NewSQL 数据库在处理非结构化或半结构化数据(例如社交媒体帖子或传感器数据)方面可能不太有效。与其他类型的数据库相比,它们的管理也更复杂,因为它们通常需要专业知识和专业技能来优化性能并确保数据一致性。

尽管存在这些局限性,但 NewSQL 数据库正成为管理大量复杂结构化数据的越来越受欢迎的选择。通过了解它们的优势和劣势,您可以更好地决定何时使用它们以及如何根据您的需求优化它们的性能。

NewSQL 数据库供应商的示例是 CockroachDB。

在这篇博文中,我们讨论了每个软件工程师都应该知道的 10 种类型的数据库。虽然有许多其他类型的数据库可用,但这些是最常用的数据库。了解不同类型数据库的优缺点可以帮助您就给定项目使用哪一个数据库做出明智的决策。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。