最新文章
CPP_PrimerPlus 2周前
《C++ Primer Plus 第六版》 的学习笔记。
语言导学 2周前
这是 C++ 语言之父 Stroustrup
写的新书《A Tour of C++》的中文版。2015年出版的,值的一看。本文是笔记。
Schemer语言 2周前
简单而直接的方式表达编程思维,探究计算的本质。
从C到汇编 2周前
C 语言翻译成汇编语言,只有 全局变量 和 函数 有自己的名字(也是内存地址),类型信息、局部变量都被抹去,取而代之的是反复利用的“寄存器”和精确计算好的“内存地址+偏移量”。
CDN 2周前
负载均衡系统是一个CDN系统的神经中枢,主要功能是负责对所有发起服务请求的用户进行访问调度,确定提供给用户的最终实际访问地址。
GAC(Global Access Controller)模块对应于图2-1中的负载均衡系统,主要采用了智能DNS解析方案,负责通过域名解析应答实现将用户请求调度到最优服务节点的目的。
CCN(ChinaCache Nod)模块对应于图2-1中的分发服务系统,是CDN的基本服务模块,由分布于各个城市、各个运营商网络中的Cache设备和辅助设备组成。
NOC(Network Operating Center)模块对应图2-1中的网络管理系统,负责对全网进行7×24小时的监控和管理。NOC可以监控ChinaCache CDN中的链路状况、节点响应速度、设备运行状态,也可以监控到客户的源站点运行状况等信息,一旦发现异常马上采取相应措施予以解决,是保障CDN服务安全可靠性的重要系统。值得一提的是,蓝汛的NOC中设置了源站点监控功能,对客户源站进行可达性监控,从而减轻或者避免由于源站故障造成的服务中断。
OSS(Operating Support System)模块对应图2-1中的运营管理子系统,负责采集和汇总各个CCN的日志记录信息,然后由中央处理软件加以整理和分析,最后通过客户服务门户进行发布。蓝汛的客户可以通过OSS提供的查询界面来查询加速页面或频道的实时流量、流量分布、点击数量、访问日志等信息。
首先由用户代理(IP地址10.9.55.68,端口4719)向服务器主机(IP地址202.102.86.141,端口80,这里的服务器不是源服务器)发起TCP连接建立请求[SYN],服务器同意用户请求并向用户代理响应[SYN, ACK],用户代理再返回[ACK],这样双方就通过三次握手过程建立起了一个TCP连接。
K8s实战 2周前
文章无缩略内容。
KMS 2周前
文章无缩略内容。
Nginx节点 2周前
参考 Ubuntu 装机指南,获得一个干净的Server
后,下面可以将这个Server
做成Web
应用节点。
PHP节点 2周前
在安装完Nginx
或者Apache2
后,总是需要安装PHP
的基础支持软件。
SRE 2周前
SRE
全称 Site Reliability Engineer
,目标是“创造软件系统来维护系统运行” 来代替 “人工操作”。
职责:可用性改进、延迟优化、性能优化、效率优化、变更管理、监控、紧急事务处理、容量规划与管理。
网页加载顺序 2周前
本文是HTML
CSS
JS
的加载流程相关知识的笔记。
VirtualBox 2周前
文章无缩略内容。
CSAPP 2周前
第一部分: 1 ~ 6 , 帮助我理解了程序和硬件之间的交互关系。
第二部分: 7 ~ 9 , 帮助我理解了程序和操作系统之间的交互关系。
第三部分: 10 ~12 , 帮助我理解了与I/O设备以及其他程序通信,理解了网络服务程序和并发程序。
Linux系统原理 2周前
单内核设计:内核从整体上作为一个单独的大过程来实现,运行在一个单独的地址空间上,内核以单个二进制文件的形式存放于磁盘中.因为所有内核服务都在这样一个大内核地址空间上运行,所以通信可以直接调用函数来实现。
linux 就是一个单内核设计。
进程管理
负责创建、结束进程,管理内核的活动,如软件中断、tasklet等,管理进程间通信,如消息(message)、管道(pipe)等,实现进程调度(schedule)。进程调度是进程管理的重要任务,它处理所有活动的、等待被执行的和被阻塞(blocking)的进程调度,使所有应用和进程合理地共享处理器的运行时间。
内存管理
内存是系统最主要的资源之一,计算机的性能在很大程度上与其所配备的内存有关。Linux内核内存管理的主要功能就是给进程分配地址空间,该地址空间只允许本进程自己访问。
文件系统
在Linux操作系统中,文件系统是整个系统的中枢。Linux与其他操作系统不同,几乎所有的操作都基于文件系统接口的处理,如设备驱动程序可以按文件方式访问设备,通过/proc文件系统可以访问Linux内核的数据和参数,这两个功能在调试时非常有效。
设备驱动程序
在所有的操作系统中,设备驱动程序都是硬件的抽象,通过它可以访问硬件。Linux可以用模块(模块)的方式实现设备驱动程序,提供了在系统运行时动态加载和卸载设备驱动程序的途径。
网络子系统
在Linux中所有的网络操作是由操作系统管理的。这是因为网络操作不能分配给某个进程完成。在处理收到的网络数据包时,数据包的接收是异步事件。接收数据包任务必须在进程处理这些数据包前先收集齐所有的网络包、标识数据,然后向上层传送,这就是为什么由内核的网络子系统负责处理数据包,而不是由某个进程和网络接口来处理。
Unixlinux编程实践 2周前
文章无缩略内容。
linux系统编程 2周前
文章无缩略内容。
文件系统 2周前
[TOC]
线程 2周前
记录自己所学的所有有关于线程的知识。
高性能服务器编程 2周前
文章无缩略内容。
数据库设计 2周前
需求分析
数据自身的特点?
数据之间的关系?
实体是什么?实体与表之间不是一一对应的关系。实体之间的关系(1对1,1对多,多对多)。实体的标识(主健)
实体的记录的增长速度。
时效性:(用户登录 session之类)的数据要按时清理,
增长性: (有些开发人员,喜欢将访问日志存库,这种数据增长是非常快的,必须制定好清理规则)
逻辑设计
深入理解构建系统 2周前
本文是《深入理解软件构造系统--原理与最佳实践》一书的学习笔记。
程序员的思维修炼 2周前
本文是《程序员的思维修炼 开发认知潜能的九节课》的笔记。
32位CPU汇编语言 2周前
x86
、x86-64
、PowerPC
、ARM
CPU 的 32 位指令集是不同的,而目前的汇编语言有两种 intel
和AT&T
。Gcc
编译器都是默认使用AT&T
汇编语言的。汇编器 nasm
、masm
、as
、yasm
可以将汇编语言编译成对应平台的目标文件。
64位CPU汇编语言 2周前
Linux
下 64 位汇编语言学习记录。时至今日,汇编语言的重点已经不是编写汇编语言代码,而是看懂 GCC 编译器生成的汇编语言,本文正是以此为目标进行学习。
编码 2周前
《编码 隐匿在计算机软硬件背后的语言》笔记
计算机硬件 2周前
文章无缩略内容。
大话数据结构 2周前
本文是《大话数据结构》的笔记。
字符串 2周前
文章无缩略内容。
排序 2周前
常见排序的一些最优写法的收集。
散列 2周前
散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。
传输层 2周前
负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题
协议: TCP 传输控制协议、UDP 用户数据报协议
重要设备:网关
TCP :双方必须先建立链接(三次握手)才可收发数据,内核维护了连接状态、读写缓冲区、定时器等结构。数据传送是基于字节流
,一端不断的写入,另一端不断的接收。但通信结束时,必须断开链接(四次挥手),释放内核相关结构数据
UDP:无连接,每次发送数据都要指明接收端地址,基于数据报传输数据,每次发送的数据包的长度固定,接收时也必须一次性读取整个数据包(否则数据就被截断)
网络层 2周前
文章无缩略内容。
CLAUDE 2周前
文章无缩略内容。
Primer 2周前
《C++ Primer》 第五版笔记。
Erlang教程 2周前
面向消息、面向并发的语言Erlang
!!!
GDB调试器 2周前
单步跟踪程序、查看变量内容、内存位置、以及指向每条语句后CPU寄存器的变化情况。
也可以分析到达程序中某个点之前的函数调用序列。
GDB
是符号式调试器,必须通过-g
选项,在程序编译时将源代码到机器指令的信息写入到可执行文件的符号表中。在包含多个源代码文件的大型程序中,必须在编译每个模块的时候都使用-g
选项。
Make构建工具 2周前
make
的作用是让将源代码转换为可执行文件之类的例行性工作自动化,把可执行文件到源代码的依赖关系通过makefile
告知make
,然后make
会根据这些关系以及文件的时间戳判断,应该重新执行哪些步骤,用以编译出可执行文件。
高可用 2周前
需求驱动驱动;而高可用与高性能,是架构设计中两个非常重要的决策因素。因此,面对不同业务系统的不同需求,对高可用与高性能也会有不同的决策结论,其实现的复杂度也各不相同。
支付宝业务,对于可用性和性能就会有很高的要求,
可用性方面希望能提供7*24不间断服务
高性能方面则希望能实时收付款
而对于一个学生管理系统,在可用性与性能方面就不一定要有多高的要求,比如晚上可关机,几秒内能查询到信息也可接受。为此,高可用性与高性能的复杂度讨论需要结合业务需求。
1 WHAT - 什么是可用性?
定义可用性,可以先定义什么是不可用。需要经历若干环节,网站的页面才能呈现在最终的用户面前;而其中的任何一个环节出现了故障,都可能会导致网站的页面不可访问,也就是出现了网站不可用的情况。昨夜iOS版本QQ出现大面积闪退就是一个系统不可用的典型案例。
我们可以利用百分比来对网站可用性进行度量:
网站不可用时间=完成故障修复的时间点 - 故障发现的时间点
网站年度可用时间=年度总时间 - 网站不可用时间
网站年度可用性=(网站年度可用时间/年度总时间) x 100%
举例:一些知名大型网站的可用性可达到99.99%(俗称4个9),我们可以算一下一年下来留给处理故障的时间有多少?
年度总时间=3652460=525600分钟
网站不可用时间=525600*(1-99.99%)=52.56分钟
也就是,如果网站要达到4个9的可用性,一年下来网站不可用时间最多53分钟(也就是不足1个小时)。
可见,高可用性就是技术实力的象征,高可用性就是竞争力。
2 WHY - 为什么会出现不可用?
硬件故障。网站多运行在普通的商用服务器,而这些服务器本身就不具备高可用性,再加之网站系统背后有数量众多服务器,那么一定时间内服务器宕机是大概率事件,直接导致部署在该服务器上的服务受影响。
软件BUG或网站更新升级发布。BUG不能消灭,只能减少;上线后的系统在运行过程中,难免会出现故障,而这些故障同样直接导致某些网站服务不可用;此外,网站更新升级发布也会引起相对较频繁的服务器宕机。
不可抗拒力。如地震、水灾、战争等。
3 HOW - 如何做到高可用
核心思想:网站高可用的主要技术手段是服务与数据的冗余备份与失效转移。同一服务组件部署在多台服务器上;数据存储在多台服务器上互相备份。通过上述技术手段,当任何一台服务器宕机或出现各种不可预期的问题时,就将相应的服务切换到其他可用的服务器上,不影响系统的整体可用性,也不会导致数据丢失。
从架构角度看可用性:当前网站系统多采用经典的分层模型,从上到下为:应用层、服务层与数据层。应用层主要实现业务逻辑处理;服务层提供可复用的服务;数据层负责数据读写;在部署架构上常采用应用和数据分离部署,应用会部署到不同服务器上,这些服务器被称为应用层的服务器;这些可复用的服务也会各自部署在不同服务器上,称为服务层的服务器;而各类数据库系统、文件柜等数据则部署在数据层的服务器。
硬件故障方面引起不可用的技术解决措施:
(1)应用服务器。可通过负载均衡设备将多个应用服务器构建为集群对外提供服务(前提是这些服务需要设计为无状态,即应用服务器不保存业务的上下文信息,而仅根据每次请求提交的数据进行业务逻辑的操作响应),当均衡设备通过心跳检测手段检测到应用服务器不可用时,则将其从集群中移除,并将请求切换到其他可用的应用服务上。
(2)服务层服务器。这些服务器被应用层通过分布式服务框架(如Dubbo)访问,分布式服务框架可在应用层客户端程序中实现软件负载均衡,并通过服务注册中心提供服务的服务器进行心跳检测,当发现有服务器不可用时,立即通知客户端程序修改服务列表,同时移除响应的服务器。
(3)数据服务器。需要在数据写入时进行数据同步复制,将数据写入多台服务器上,实现数据冗余备份;当数据服务器宕机时,应用程序将访问切换到有备份数据的服务器上。
软件方面引起不可用的技术解决措施:通过软件开发过程进行质量保证。通过预发布验证、严格测试、灰度发布等手段,尽量减少上线服务的故障。
http 2周前
2 MIME type ,用于描述并标记 web 多媒体内容。
比如:html 格式文档由 text/html 标识,ASCII 文本由 text/plain 类型标识,gif :image/gif ,jpeg 标识:image/jpeg
3 URL 统一资源定位符:方案+服务器地址+ 某个具体资源
http://www.joes-hardware.com/specials/saw-blade.gif
4 http 方法
规范书写 2周前
谨慎添加选择符规则,尤其不可滥用id,尽可能继承和复用已有样式
选择符、属性、值均用小写(格式的颜色值除外),缩写的选择符名称须说明缩写前的全称,例如 .cl -> Clearfix
勿使用冗余低效的 CSS 写法,例如:ul li a span{... }
慎用 !important
建议使用具有语义化的 classname 或 id
避免使用兼容性不好的滤镜
开发过程中的未定事项,须用 [!] 标出,以便于后续讨论整理。
注释格式,统一使用双斜杠加*。
上下模块之间的间距统一使用下一个模块的 margin-top 来实现,好处是:如果没有下一个模块也不会多出一段空隙。
具有特定意义的请勿直接占用
编程学习路径 2周前
文章无缩略内容。
BeyondCompare 2周前
文章无缩略内容。
ab并发测试工具 2周前
文章无缩略内容。
cmake 2周前
本文记录了cmake
的用法。
curl 2周前
文章无缩略内容。