`
wdhdmx
  • 浏览: 304466 次
  • 性别: Icon_minigender_1
  • 来自: 山西
博客专栏
D4bbb5f7-9aa4-3e66-8194-f61b3f0241c2
天天编程
浏览量:21974
社区版块
存档分类
最新评论

《构建高性能WEb站点精选版》读书笔记

阅读更多

这本电子书的下载地址:http://www.infoq.com/cn/minibooks/build-high-performance-web

 

前言

构建web站点的基础技术几乎多年从未改变,比如tcp,如今依旧是网络数据传输的主宰,而http则更与我们息息相关,人们做的事情就是在基础上一层一层的封装,不断诞生新的技术,让开发者迷失方向。

 

第一章 分布式缓存

A.基础

1.毫无疑问,memcacehd最需要的是内存。

2.memcached使用了高效的hash算法来存储数据结构,并使用精心设计的内存分配器,他使得查询的时间复杂度达到O(1),这意味着不管查询多少数据,所用的时间都是一样的 ,几乎没有理由不用它。

3.memcahced数据过期是使用LRU,将不常用的数据先淘汰。memcahced使用libevent函数库来实现网络并发模型,所以在较大并发情况下仍能放心使用memcached。

4.memcahced每秒可以处理2338个set请求(里面包括每次操作set都连接和断开操作)(文中使用的测试都是ab测试 )。不进行连接和断开的话可以处理40823个set请求

5.memcached数据项存储使用的是二进制字节byte,网络传输也使用二进制数据。顺便说一下,我们熟悉的json能很好的应用在序列化中,互相转换的计算量不大。

 

B.重复的身份验证

1.大多数站点都有自己的用户系统,每个用户请求页面时都需要对用户的登录状态进行检查。

2.很早以前,把用户的id写入浏览器cookies里,但是有人喜欢篡改cookies,冒充其它用户。

3.新的方法,用户在登录时会获取一个ticket=010f06c7e74f82fe7fb2aea97c50b2字符串,并且写入cookies,每次验证都要上报这个随机字符串。

执行select * from user_info where user_ticket="'ticket'";效率低

在语句前加上查询分析工具explain 就可以看查询次数(结果里面的key为索引关键字,rows查询多少次)。然后对应加入索引后速度变快很多。在一万条数据的情况下每秒未用索引248,使用索引1675,但是使用缓存2654。

 

C.原子加法

1.操作数据库+1的操作,每秒1908次。

2.缓存读取后+1,再写入,是不合理的,在写的时候不许给缓存加锁,但是又由于加锁后速度会慢很多,所以这种效率不高。

3.缓存提供了原子操作,如果数据不存在,会创建数据项,并赋值1,等数据到达了一定数量,写入数据库,同时置为0。

 

D.监控

1.memcached提供了监控的命令。(这个可以放在后台看),可以获得很多信息,例如:运行时间、查询次数、更新次数、命中次数、读取总字节、使用大小、缓存总大小等等。

2.缓存的重建和预热,要做到不影响站点的正常运转。

 

第二章 WEB负载均衡

1.如果公司只依赖一个因素,系统、设备、或人,就会暴露单点故障或隐患,我们应该尽量避免单点故障。

2.返回302,就是要重定向,访问一个站点,会重定向到不同的域名下。

3.不仅是需要负载均衡,同样需要负载反馈

4.DNS指向多个IP,实现负载。还有智能解析,对不同地方的IP进行不同的域名解析。

5.可以利用后端服务器给请求追加写给用户的cookies中,让随后的访问都知道该转发给哪台后端服务器。如果允许的话,我们应该避免这种设计,采用分布式Session或者分布式缓存等,让后端服务的应用尽量与本地无关 。!!!

6.linux从2.4开始,其内置的Netfilter就能修改Ip包,他包含控制和过滤数据包的规则。(还有一个技术iptables)

7.heartbeat对主调度器进行心跳检测,一旦发现主调度器出现问题,立即启动转移,进行IP变更,相关服务启动,随后主调度启动后将相关资源自动交回主调度器

 

第三章 内容分发和同步

1.利用NFS等共享文件可以帮助系统在多台服务器进行共享文件,最终也有可能会成为制约发展的罪魁祸首。

2.每一项重大成就都会带来新的问题。任何一个发展随着时间的推移都会出现新的严重的困难。

3.还介绍了几种工具,看不懂,放弃

 

第四章 数据库扩展

1.mysql为例只需要做到:开启二进制文件(log-bin),然后进行简单配置。

2.开启日志记录,对性能开销大概有1% 的影响,与复制的意义,这是微不足道的。

3.msyqlproxy可以将对A表的数据操作,改为对B表的修改,同样,他完全可以实现读写分离。

4.数据库的写操作可以按照表来垂直扩展,即可以一个服务器只操作一张表。db_friend 其它的表由别的服务器操作。很多大规模的站点都经历从主从赋值,再到读写分离,到垂直扩展,再到水平分区

5.水平分区:按博客作者的ID即奇偶来存入不同的服务器中,就成为水平分区。已经实现分表后在实现分区会容易很多。

6. 分区的扩展性更多的体现在能否实现扩展,并且减少最小的移动。

       hash算法分区,但是这样不容易扩展。(例如上面说的按id的奇偶)。

       利用区域性1-1000、1001-2000 这样分区,只需要维护一个简单的映射表即可。

7.spock proxy 在mysqlproxy的代码基础上进行了一些改进,他实现了水平分区的调度。

 

第五章 性能监控

1.nmon是一款在服务器运行的实时监控软件,他可以提供每秒的系统监控,并通过nmon Analyser获得CPU统计报表

2.监控代理包括MRTG,Cacti以及NAGIOS在内的很多监控工具都是利用SNMP来监控远程服务器,而你只需要在被监控的服务器上开启SNMP服务,同时授权配置即可。

3.nginx也提供了必要的HTTP监控接口,在代码里面加上如下,然后访问127.0.0.1/wanstatus 就能看到基本的一点信息。

location /wanstatus{
stub_status on;
access_log off;
}

 

4.继续介绍一些可视化的工具,对于我来说暂时没用,忽略。

 

结束

读后感

半天看完,86页,一本适合快速阅读的书,可以对服务器整体的认识更进了一步。也为看这本书的完整版做个铺垫。

0
0
分享到:
评论

相关推荐

    Linux性能与安全合集

    Linux Security Tips(Linux 安全技巧).pdf linux 系统安全与优化中文版 by smallfish.pdf Linux 系统安全与优化中文版221.pdf Linux 进程管理.pdf Linux安全和优化.pdf ... 构建高性能WEB站点.p

    easyUI笔记

    ### easyUI笔记知识点详解 #### 一、什么是jQuery EasyUI? **jQuery EasyUI** 是一组基于 jQuery 的 UI 插件集合。它的目标是帮助 Web 开发者更容易地创建功能丰富且美观的用户界面。通过使用 **jQuery EasyUI**...

    SOLR学习笔记

    Solr 的设计目标是为了提供高性能、高可用性的搜索服务,适用于各种规模的企业级应用。 **主要特点** 包括: - **面向应用**:Solr 提供了丰富的特性来满足不同场景的需求,比如高亮显示匹配文本、支持多种输出...

    笔记资料.zip

    例如,Java应用处理业务逻辑,Nginx负责静态资源服务和负载均衡,两者共同构建出高性能的Web服务架构。 这份笔记资料可能详细记录了作者在学习过程中遇到的问题、解决方法以及一些实用技巧,对于初学者和有经验的...

    基于PHP的minIsay php笔记程序beta.zip

    1. **轻量级架构**:minIsay的设计理念是简洁,因此其代码结构清晰,资源占用少,对于小型和个人站点而言,运行效率高,且易于部署和维护。 2. **PHP技术栈**:作为一款PHP程序,minIsay充分利用了PHP的灵活性和...

    Portal门户开发笔记

    IBM WebSphere Portal是一款强大的企业级门户平台,用于构建和管理高度可定制的、集成了多种应用和服务的用户入口。在本开发笔记中,我们将深入探讨WebSphere Portal V6到V8版本的相关知识点,涵盖从基础架构到高级...

    ngotes:使用MongoDB的笔记站点

    MongoDB是一款高性能、开源、无模式的文档型数据库,被广泛应用于Web开发中,尤其是对于处理JSON、BSON格式数据的应用场景。Ngotes是一个基于MongoDB构建的笔记站点,它利用了MongoDB的强大功能来存储和检索用户的...

    Nginx-笔记1

    【Nginx】是俄罗斯开发的一款高性能的HTTP和反向代理服务器,因其高效稳定、内存消耗小、并发能力...通过本课程的学习,你将能够全面了解Nginx,掌握其基本配置和应用场景,为构建高效稳定的Web服务环境打下坚实基础。

    尚硅谷_韩顺平_Go语言核心编程.docx

    - **后端服务开发**:由于 Golang 高效的性能表现,非常适合用于构建高性能的 Web 服务器和 API 服务。 - **云计算/云服务后台**:随着云计算的发展,越来越多的企业开始采用 Golang 来构建云服务的后端系统。 ####...

    nginx笔记+JAVA+运维

    Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,由俄罗斯开发者伊戈尔·赛索耶夫为 Rambler.ru 站点开发,以其稳定性、高效能和低系统资源消耗著称。自 2004 年首次发布以来,Nginx 已经发展成为一个广泛使用的...

    lucene笔记

    - **Nutch**: 包含大规模爬虫工具,能够抓取和分析Web站点数据。 - **jsoup**: Java HTML解析器,支持直接解析URL地址、HTML文本。 - **Heritrix**: 开源的网络爬虫,具有良好的可扩展性。 #### 索引文件的逻辑...

    老男孩linux运维课程笔记

    - **Nginx优势**:高性能、稳定性好、资源消耗低、易于扩展。 - **模块和工作原理**: - Nginx支持多种模块,如HTTP Proxy模块、HTTP FastCGI模块等。 - 工作模式采用异步非阻塞的方式,能够高效处理大量并发请求...

    flutter 环境搭建-flutter环境搭建,很不错的学习笔记

    其核心优势在于跨平台性和高性能表现。 **跨平台性**:Flutter 的跨平台特性意味着开发者可以使用同一套代码库来部署应用程序至多个不同的平台。这些平台包括但不限于: - **移动端**:Android 和 iOS。 - **Web端...

    documentation::open_file_folder:我用盖茨比制成的个人笔记本

    首先,Gatsby是一款基于React的静态站点生成器,它结合了现代Web开发的最佳实践,如JAMstack(JavaScript、APIs、Markup),为构建高性能的网站提供了一流的解决方案。通过Gatsby,我们可以快速搭建起个人笔记本的...

    JavaScript_使用 NextJS Notion API 实现的支持多种部署方案的静态博客无需服务器零门槛搭建网站为

    它简化了React应用的开发流程,提供了诸如自动代码分割、预渲染、路由、热模块替换等特性,让开发者可以快速地构建可扩展的、高性能的Web应用。 **Notion API** Notion是一款强大的笔记和项目管理工具,它的API...

    PriorityQueue带优先级的队列md,学习代码笔记

    **PriorityQueue带优先级的队列** `PriorityQueue`是Java集合框架...理解这些技术并合理选择使用,对于构建高性能、安全的Web应用至关重要。在实际开发中,需要根据应用场景和需求来决定使用哪种机制来管理用户状态。

    《Apache服务器配置与使用工作笔记》.(王江伟).[PDF].&ckook;

    ### Apache服务器配置与使用知识点详解 #### 一、Apache服务器简介...通过以上知识点的学习,读者可以深入了解Apache服务器的基本原理、配置方法及高级用法,从而更好地利用Apache构建稳定、高效、安全的Web服务环境。

    notebook:每日笔记本迷你博客

    1. **Gatsby**:Gatsby是一个基于React的开源静态站点生成器,用于快速构建现代Web应用。Gatsby以其出色的性能、丰富的插件生态系统和SEO优化而闻名。在“notebook”项目中,Gatsby被用来构建响应式的博客界面,能够...

    B2C商城系统 PC端+H5移动端 + 微信端 快速为你构建自己的商城系统.rar

    对于高并发的B2C商城,性能优化至关重要,包括缓存策略、负载均衡、CDN内容分发网络等技术的应用,以保证系统的稳定性和响应速度。 11. **API接口**: 商城系统可能需要与其他服务集成,如物流查询、第三方支付、...

Global site tag (gtag.js) - Google Analytics