分类目录归档:高并发与大数据

负载均衡如何做,负载均衡的几个方案

1.硬件负载均衡 一种是通过硬件来进行进行,常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用; 2.软件负载均衡 LVS/HAProxy、Nginx的基于Linux的开源免费的负载均衡软件策略,这些都是通过软件级别来实现,所以费用非常低廉,所以我个也比较推荐大家采用第二种方案来实施自己网站的负载均衡需求。 在软件负载均衡里,只要买几个服务器,安装软件就好了 合理的软件方案:Nginx/HAProxy+Keepalived作Web最前端的负载均衡器,后端的MySQL数据库架构采用一主多从,读写分离的方式,采用LVS+Keepalived的方式。 3.本地负载均衡技术 本地负载均衡技术是对本地服务器群进行负载均衡处理。该技术通过对服务器进行性能优化,使流量能够平均分配在服务器群中的各个服务器上,本地负载均衡技术不需要购买昂贵的服务器或优化现有的网络结构。 4.全局负载均衡技术 全局负载均衡技术适用于拥有多个低于的服务器集群的大型网站系统。全局负载均衡技术是对分布在全国各个地区的多个服务器进行负载均衡处理,该技术可以通过对访问用户的IP地理位置判定,自动转向地域最近点。很多大型网站都使用的这种技术。 5.链路集合负载均衡技术 链路集合负载均衡技术是将网络系统中的多条物理链路,当作单一的聚合逻辑链路来使用,使网站系统中的数据流量由聚合逻辑链路中所有的物理链路共同承担。这种技术可以在不改变现有的线路结构,不增加现有带宽的基础上大大提高网络数据吞吐量,节约成本。 三种软件负载均衡 LVS负载均衡的特点是: 1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的; 2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率; 3、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived; 4、无流量,保证了均衡器IO的性能不会收到大流量的影响; 5、应用范围比较广,可以对所有应用做负载均衡; 6、软件本身不支持正则处理,不能做动静分离,这个就比较遗憾了;其实现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。 7、如果是网站应用比较庞大的话,实施LVS/DR+Keepalived起来就比较复杂了,特别后面有Windows Server应用的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。 Nginx负载均衡的特点是: 1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活,这也是许多朋友喜欢它的原因之一; 2、Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在; 3、Nginx安装和配置比较简单,测试起来比较方便; 4、也可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量; 5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测; 6、Nginx仅能支持http和Email,这样就在适用范围上面小很多,这个它的弱势; 7、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web架构,大有和以前最流行的LAMP架构分庭抗争之势,在高流量的环境中也有很好的效果。 8、Nginx现在作为Web反向加速缓存越来越成熟了,很多朋友都已在生产环境下投入生产了,而且反映效果不错,速度比传统的Squid服务器更快,有兴趣的朋友可以考虑用其作为反向代理加速器。 HAProxy负载均衡的特点是: 1、HAProxy是支持虚拟主机的,以前有朋友说这个不支持虚拟主机,我这里特此更正一下。 2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作 3、支持url检测后端的服务器出问题的检测会有很好的帮助。 4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。 5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。 6、HAProxy的算法现在也越来越多了,具体有如下8种: ①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的; … 继续阅读

发表在 Linux, 高并发与大数据 | 标签为 , , | 留下评论

数据大规模插入效率问题

CSDN网友问: 目前有一个需求,用户需要在短时间内将几万条数据导入 MSSQL 数据库。 如果有一条无法导入,需要知道是哪条数据出的错。 导入之前最好还要根据条件验证一下数据是否存在,存在就删除。 现在我一条一条判断导入,非常缓慢。 请问有什么好的思路么? 月小升答: 你慢在搜索上。每次检查会相当消耗资源 1.如果数据有关键字段,能表示重复 比如用户ID号userid。那么把这个字段userid做唯一索引(插入的时候进行try catch 遇到重复会自动被catch,你就知道哪条重复了)被插入的永远都是不重复的 2.如果没有关键字段,所有字段合并做MD5值,单独加个字段叫md 做成唯一索引,然后try catch,原理和1相同 数据库的插入效率很高,搜索效率却很低。主要你要扫描的记录会越来越多,所以搜索会慢。避免搜索就变线性时间了。 (几万条数据,玩的还算比较少,我用这个办法玩过1000万的数据)

发表在 JAVA, 高并发与大数据 | 标签为 , , | 留下评论

百度挂了,百度技术太自信?

百度前一阵为了记录每条记录被点击的次数,改成每条记录的点击都经过一个URL进行跳转。 这个规则也被各种SEO玩家,充分作弊。 今天扛不住了。 百度的跳转地址

发表在 互联网观察, 高并发与大数据 | 标签为 , , , | 一条评论

mysql too many open connections解决

曾经以为在my.cnf写入max_connections = 2000 就可以改变mysql的最大并发量,今天查到一个命令,发现服务器的mysql最大连接数为151. 控制台,连接上mysql show variables; 这条命令可以看到所有基础配置 如果单独看max_connections可以这样 show variables like ‘max%’; +—————————-+————+ | Variable_name | Value | +—————————-+————+ | max_allowed_packet | 1048576 | | max_binlog_cache_size | 4294963200 | | max_binlog_size | 1073741824 | | max_connect_errors | 10 | … 继续阅读

发表在 数据库, 高并发与大数据 | 标签为 , , , | 留下评论

redis访问权限控制,密码设置

redis作为一个高速数据库,在互联网上,必须有对应的安全机制来进行保护。 1.比较安全的办法是采用绑定IP的方式来进行控制。 bind 127.0.0.1 表示仅仅允许通过127.0.0.1这个ip地址进行访问。那么其实只有自己才能访问自己了,其他机器都无法访问他。 这段命令要去redis.conf里修改。 这里请注意 我们常用的启动方式src/redis-server 改为src/redis-server redis.conf 因为它需要加载配置文件。 这个方法有一点不太好,我难免有多台机器访问一个redis服务 2.设置密码,以提供远程登陆 redis.conf 找到 requirepass 写上 requirepass yourpassword 设置密码以后发现可以登陆,但是无法执行命令了。 src/redis-cli -h 192.168.1.121 keys * (error) ERR operation not permitted 授权命令 auth 123456 登陆带密码方式 ./redis-cli -h 192.168.1.121 -a abcd 由于redis并发能力极强,仅仅搞密码,攻击者可能在短期内发送大量猜密码的请求,很容易暴力破解,所以建议密码越长越好,比如20位。(密码在 … 继续阅读

发表在 Linux, 高并发与大数据 | 标签为 , , , | 留下评论

redis-benchmark 测试redis性能

注明:本篇文章部分内容为原来reids.io官方英文文档翻译 redis 自己提供了一个性能测试工具redis-benchmark. redis-benchmark可以模拟N个机器,同时发送M个请求。 用法:redis-benchmark [-h ] [-p ] [-c ] [-n [-k ] -h <hostname> Server hostname (default 127.0.0.1) -p <port> Server port (default 6379) -s <socket> Server socket (overrides host and port) -c <clients> Number of parallel connections … 继续阅读

发表在 Linux, 高并发与大数据 | 标签为 , , , , | 留下评论

ubuntu安装Redis Live监控服务

redis live为监控redis服务的软件,带有监控web界面。 流传于互联网的各种教程,都有个巨大的让人搞不太清楚的问题。就是到底RedisStatsServer 6381端口哪里来的问题。 月小升采用逐步安装的办法。也没有找到,有知道如何配置RedisStatsServer的朋友,请告知。以下正文为放弃6381的安装方法。 一般Linux自带python版本 安装python 相关 pip命令 sudo apt-get install python-setuptools sudo easy_install pip pip-2.6 install tornado pip-2.6 install redis pip-2.6 install python-dateutil 查看你机器python版本 直接输入python 如果低于2.7 安装 pip-2.6 install argparse 下载 redis live链接 https://github.com/kumarnitin/RedisLive/zipball/master 进入src目录修改redis-live.conf { "RedisServers": [ … 继续阅读

发表在 Linux, 数据库, 高并发与大数据 | 标签为 , , , | 2 条评论

java遍历redis的key读取整个数据库

redis提供了灵活的数据查询方式,最牛的就是key的搜索支持正则表达式。 jedis.keys(“*”);表示搜索所有key jedis.keys(“abc*”)表示搜索开头为abc的key数据 遍历了key就能遍历到value。 其实就是一个set RedisDO rd = new RedisDO(); rd.open(); Set s = rd.jedis.keys("*"); Iterator it = s.iterator();     while (it.hasNext()) { String key = (String) it.next(); String value = rd.jedis.get(key); System.out.println(key + value); } rd.close(); rd的算法为集成redis 运算 … 继续阅读

发表在 JAVA, 高并发与大数据 | 标签为 , , , | 留下评论

java和php读写memcache乱码不兼容问题

memcache java php不兼容问题。 故事背景:我用java插入一条数字记录,用php读取无法正确读取。 今天发现如果使用MemCachedClient来插入一条数字,或者java的对象,那么在php调出来就是乱码。 对象可以理解,简单的数字也会乱码 如 mcc.set(“a”,25); php中出来的是乱码,同时如果采用telnet的方式来进行查询 get a 出来问号。 翻了一圈说要改类包。 最后发现个问题,如果改用字符串,那么java和php就能通用了。 mcc.set(“a”,”25″); 而且telnet 192.168.0.1 11211进入进行get也能得出正确的数字了。 本来我要对a这个值进行加法运算,觉得采用int会方便一些,居然和php读取memcache的时候有冲突。还是来回进行变量类型转换吧。 如果你也在使用java写入memcache,php读出memcache,通用一个字符串存储,就可以避免很多问题了。 不是java的类包不行。

发表在 JAVA, PHP, 高并发与大数据 | 标签为 , , | 一条评论

Linux下Memcache安装及java调用

ubuntu下就是方便啊。 直接apt-get install memcached memcached -d -m 500 -p 11211 -u root -l 192.168.0.11 服务启动 说明 -m表示给多少内存给memcache -p 端口 -u 指定用户执行身份 -d 守护进程模式 本地查看 telnet 192.168.0.11 11211 进入以后敲入 stats 下载java操作memcache客户端 https://github.com/gwhalin/Memcached-Java-Client/downloads 将解压缩的jar包全部复制到java工程lib下。 开始搞了。 import com.danga.MemCached.MemCachedClient; import com.danga.MemCached.SockIOPool;   public class … 继续阅读

发表在 JAVA, Linux, 高并发与大数据 | 标签为 , , , | 留下评论