分类归档

Docker教程

FWQ
Docker教程
Nginx、LVS、HAProxy负载均衡软件的优缺点详解
Nginx、LVS、HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下。 一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了;如果机器不少,可以用DNS轮询,LVS所耗费的机器还是比较多的;大型网站或重要的服务,且服务器比较多时,可以考虑用LVS。 一种是通过硬件来进行进行,常见的硬件有比较昂贵的F5和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;另外一种就是类似于Nginx、LVS、HAProxy的基于Linux的开源免费的负载均衡软件,这些都是通过软件级别来实现,所以费用非常低廉。 目前关于网站架构一般比较合理流行的架构方案:Web前端采用Nginx、HAProxy+Keepalived作负载均衡器;后端采用MySQL数据库一主多从和读写分离,采用LVS+Keepalived的架构。当然要根据项目具体需求制定方案。   下面说说各自的特点和适用场合。 一、Nginx Nginx的优点是: 工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一,Nginx单凭这点可利用的场合就远多于LVS了。 Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一;相反LVS对网络稳定性依赖比较大,这点本人深有体会; Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。 可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。 Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。 Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。 Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可以考虑用其作为反向代理加速器。 Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了,不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃。 Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多。 淘宝的前端使用的Tengine就是基于nginx做的二次开发定制版。 Nginx常规的HTTP请求和响应流程图: Nginx的缺点是: Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点。 对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。 不支持Session的直接保持,但能通过ip_hash来解决。 二、LVS 使用Linux内核集群实现一个高性能、高可用的负载均衡服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。 LVS的优点是: 抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。…
2024-11-17 阅读全文 →
FWQ
Docker教程
常见数据结构与算法整理总结(上)
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。下面是自己整理的常用数据结构与算法相关内容,如有错误,欢迎指出。 为了便于描述,文中涉及到的代码部分都是用Java语言编写的,其实Java本身对常见的几种数据结构,线性表、栈、队列等都提供了较好的实现,就是我们经常用到的Java集合框架,有需要的可以阅读这篇文章。Java – 集合框架完全解析   一、线性表 1.数组实现 2.链表 二、栈与队列 三、树与二叉树 1.树 2.二叉树基本概念 3.二叉查找树 4.平衡二叉树 5.红黑树 四、图 五、总结 一、线性表 线性表是最常用且最简单的一种数据结构,它是n个数据元素的有限序列。 实现线性表的方式一般有两种,一种是使用数组存储线性表的元素,即用一组连续的存储单元依次存储线性表的数据元素。另一种是使用链表存储线性表的元素,即用一组任意的存储单元存储线性表的数据元素(存储单元可以是连续的,也可以是不连续的)。 数组实现 数组是一种大小固定的数据结构,对线性表的所有操作都可以通过数组来实现。虽然数组一旦创建之后,它的大小就无法改变了,但是当数组不能再存储线性表中的新元素时,我们可以创建一个新的大的数组来替换当前数组。这样就可以使用数组实现动态的数据结构。 代码1 创建一个更大的数组来替换当前数组   int[] oldArray =…
2024-11-17 阅读全文 →
FWQ
Docker教程
常见数据结构与算法整理总结(下)
这篇文章是常见数据结构与算法整理总结的下篇,上一篇主要是对常见的数据结构进行集中总结,这篇主要是总结一些常见的算法相关内容,文章中如有错误,欢迎指出。 一、概述 二、查找算法 三、排序算法 四、其它算法 五、常见算法题 六、总结   一、概述 以前看到这样一句话,语言只是工具,算法才是程序设计的灵魂。的确,算法在计算机科学中的地位真的很重要,在很多大公司的笔试面试中,算法掌握程度的考察都占据了很大一部分。不管是为了面试还是自身编程能力的提升,花时间去研究常见的算法还是很有必要的。下面是自己对于算法这部分的学习总结。 算法简介 算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。对于同一个问题的解决,可能会存在着不同的算法,为了衡量一个算法的优劣,提出了空间复杂度与时间复杂度这两个概念。 时间复杂度 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间度量记为 T(n) = O(f(n)) 它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。这里需要重点理解这个增长率。 举个例子,看下面3个代码: 1、{++x;} 2、for(i = 1; i <= n; i++) {…
2024-11-17 阅读全文 →
FWQ
Docker教程
Yaf的安装
Yaf的下载地址:http://pecl.php.net/package/yaf Yaf的安装: # phpize # ./configure # make # make install 出现如下的提示信息,表示安装成功。 Installing shared extensions:     /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/ 在 php.ini 的未尾增加: extension=yaf.so 到此yaf的扩展安装成功。
2024-11-17 阅读全文 →
FWQ
Docker教程
PHP配置指令作用域说明
PHP总共有4个配置指令作用域:(PHP中的每个指令都有自己的作用域,指令只能在其作用域中修改,不是任何地方都能修改配置指令的) PHP_INI_PERDIR:指令可以在php.ini、httpd.conf或.htaccess文件中修改 PHP_INI_SYSTEM:指令可以在php.ini 和 httpd.conf 文件中修改 PHP_INI_USER:指令可以在用户脚本中修改 PHP_INI_ALL:指令可以在任何地方修改 下面举例子说明: 1、在用户脚本中修改(即在php文件中修改) ini_set("yaf.library","/usr/local/php7/lib"); echo ini_get("yaf.library"); 2、在php.ini中修改 yaf.library="/usr/local/php7/lib"
2024-11-17 阅读全文 →
FWQ
Docker教程
Yaf运行时配置
Yaf运行时的环境配置:   名字 默认 可修改范围 使用说明 yaf.library PHP_INI_ALL 全局类库的目录路径,稍等介绍 yaf.action_prefer 0 PHP_INI_ALL yaf.lowcase_path 0 PHP_INI_ALL yaf.use_spl_autoload 0 PHP_INI_ALL 开启的情况下, Yaf在加载不成功的情况下, 会继续让PHP的自动加载函数加载, 从性能考虑, 除非特殊情况, 否则保持这个选项关闭 yaf.forward_limit 5 PHP_INI_ALL forward最大嵌套深度…
2024-11-17 阅读全文 →
FWQ
Docker教程
Yaf可选的配置项
Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置项都以ap开头. Yaf的核心必不可少的配置项只有一个(其实, 这个也可以有默认参数, 但是作者觉得完全没有配置, 显得太寒酸了). Yaf通过在不同的环境中, 选取不同的配置节, 再结合配置可继承, 来实现一套配置适应多种环境 (线上,测试,开发).   名称 值类型 默认值 说明 application.directory String 应用的绝对目录路径 application.ext String php PHP脚本的扩展名 application.bootstrap String Bootstrapplication.php…
2024-11-17 阅读全文 →
FWQ
Docker教程
了解AI相关的概念一篇就够了
AI: 英文全称 Artificial Intelligence ,即人工制造的智能,简称人工智能,是一种研究如何使计算机实现智能的技术。 它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。 人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。   参考文档:https://wiki.mbalib.com/wiki/AI ES:英文全称Expert System,即专家系统;是一种在特定领域内具有专家水平解决问题能力的程序系统。它能够有效地运用专家多年积累的有效经验和专门知识,通过模拟专家的思维过程,解决需要专家才能解决的问题。 参考文档:https://wiki.mbalib.com/wiki/%E4%B8%93%E5%AE%B6%E7%B3%BB%E7%BB%9F AGI:英文全称Artificial General Intelligence,即通用人工智能,也称强人工智能,另外弱人工智能ANI,超人工智能 ASI 参考文档:https://wiki.mbalib.com/wiki/%E5%BC%BA%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD 李开复的3R法则: 应对人工智能威胁的三大生存攻略:二次学习、二次定义、二次复兴 ASR 和 NLP: ASR:英文全称 Automatic Speech Recognition ,即语音识别,通俗的来讲,就是将语音信号转化成文字文本,并加以输出(显示在屏幕上面)。这个过程,机器并不知道你说的是什么,可以说就是单单的实现了两种信号的转化。而且概念本身就已经说明了,信号初始状态只能是语音信号,也就是人们说的话。所以ASR又可以理解为,让机器听见。 NLP:英文全称 Natural Language Processing ,即自然语言处理。通俗的讲,通过某种算法让计算机理解所输入的内容,理解的意思就是,比如:输入“开门”,机器人的下一个动作就会是把门打开。这个过程中,输入的可能不是语音信号,也可以是键盘敲进去的,或者是用笔写上然后机器进行识别等等形式。所以,NLP又可以理解成,让机器听懂。 AIGC: 英文全称 AI…
2024-11-17 阅读全文 →
FWQ
Docker教程
计算机组成与设计-指令:计算机语言
一、硬件设计的三个基本原则 简单源于规整 越小越快 优秀的设计需要适宜的折中方案   二、公式 1、二进制的正数和负数补码转换成10进制数的通用公式: X31 * (-2)E31 + X30 * 2E30 + X29 * 2E29 +……X1 * 2E1 + X0 * 2E0 2、 求负数-x补码的快捷公式: -x补码…
2024-11-17 阅读全文 →
FWQ
Docker教程
计算机组成与设计:硬件_软件接口中文答案(第一章)
1.1 [2] <1.1>列举和描述除智能手机之外的4种类型的计算机。 解答: 个人电脑(personal computer),英文简称PC 个人移动设备(Personal mobile device),英文简称PMD 服务器(server) 超级计算机(super computer) 嵌入式计算机(embedded computer): 仓库规模计算机(warehouse scale computer),英文简称WSC 1.2 [5] <1.2> 计算机系统结构中的8个伟大思想与其他领域的思想相同。将计算机系统结构中的8个伟大思想“面向摩尔定律的设计”、“使用抽象简化设计”、“加速大概率事件”、“采用并行提高性能”、“采用流水线提高性能”、“采用预测提高性能”、“存储器层次”、“通过冗余提高可靠性”与其他领域的下列思想进行匹配: a、汽车制造中的组装生产线 b、吊桥缆索 c、采用风向信息的飞机和船舶导航系统 d、高楼中的高速电梯 e、图书馆的预定台 f、通过增大CMOS晶体管的栅极面积来减小翻转时间 g、增加电磁飞机弹射器(不同于流体驱动模型它采用电驱动),允许有新型反应堆技术才生成更多的能量…
2024-11-17 阅读全文 →