Home >
  • 【分享】TCP/IP和Socket的区别

    要写网络程序就必须用Socket,这是程序员都知道的。而且,面试的时候,我们也会问对方会不会Socket编程?一般来说,很多人都会说,Socket编程基本就是listen,accept以及send,write等几个基本的操作。是的,就跟常见的文件操作一样,只要写过就一定知道。 对于网络编程,我们也言必称TCP/IP,似乎其它网络协议已经不存在了。对于TCP/IP,我们还知道TCP和UDP,前者可以保证数据的正确和可靠性,后者则允许数据丢失。最后,我们还知道,在建立连接前,必须知道对方的IP地址和端口号。除此,普通的程序员就不会知道...
    阅读全文 →
  • 【工作】Linux 实用的端口转发工具:socat安装使用记录

    写在前面: 在实际生产中我们经常会遇到到一个场景就是,用一台机器作为转发服务器,连接AB两个网段,将转发服务器的某个端口上的流量转发到B网段的某台机器的某个端口,这样A网段的服务器就可以通过访问转发服务器上的端口访问到B网段的服务器端口。   这样的场景一般在和客户建立专线的连接时候经常用到,一般也可以采用iptables做转发,但是比较复杂,socat可以很轻松的完成这个功能。   socat可以看做netcat(nc)的替代产品,作用是在两个流之间建立双向的通道,且支持众多协议和链接方式:ip,tcp,udp,ipv6,pip...
    阅读全文 →
  • 【工作】Linux 用于内网主机名和IP解析的DNS主从集群服务部署

    写在前面: 之前研发代码程序中调用的服务器地址都是写的主机名,通过配置/etc/hosts来做解析,但是每次新增机器都需要在每台机器中添加主机名和IP的解析,不但效率很低,忘记添加或者写错解析,还会造成一些意想不到的问题。 准备工作: 1.运行环境: OS: CentOS release 6.5 主DNS:192.168.162.43 从DNS:192.168.162.44 2.临时关闭selinux # setenforce 0 3.添加防火墙规则 # vi /etc/sysconfig/iptables   -A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT -A INPUT -m state --state N...
    阅读全文 →
  • 【工作】生产环境中MySQL Drop 删除(百G级、T级)大表的解决方法

    摘星怪  /
     / 工作记录
    状况说明: 在生产环境中,时常会遇到需要删除一个大的mysql数据表,一般表的大小都在百G以上,因为INNODB会维护一个全局独占锁(在table cache上面),所以mysql在对大表做DROP TABLE 过程中,所有操作都会被HANG住,这个过程会持续很长时间,直到DROP TABLE完成才释放,这样就会影响到线上数据库的使用。   同时,从硬盘上删除一个百G以上的文件,也会造成系统的I/O开销飙高,影响其他程序运行,这也是我们需要避免和解决的问题。 原理分析: 本文中快速 DROP TABLE 利用了操作系统的 Hard Link(硬链接) 的原理。...
    阅读全文 →
  • 【案例】58集团高可用Docker容器云的实践

    58私有云平台是58同城架构线基于容器技术为内部服务开发的一套业务实例管理平台,支持业务实例按需扩展,秒级伸缩,平台提供友好的用户交互过程,规范化的测试、上线流程,旨在将开发、测试人员从基础环境的配置与管理中解放出来,使其更聚焦于自己的业务。本文和大家分享在私有云平台实施过程中的相关容器技术实践。 本文主要从以下三个部分来进行讨论: 背景:当前存在哪些问题,为什么使用容器技术 整体架构:整个容器技术的架构方案 核心模块的设计方案:一些核心模块的选型决策与解决方案 为什么使用容器...
    阅读全文 →
  • 【分享】在生产环境中使用Docker Swarm的一些建议

    摘星怪  /
     / 虚拟化
    译者按: 实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行。然而,面对Kubernetes, Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它们之中,Swarm是Docker原生的,同时也是最简单,最易学,最节省资源的,至少值得我们多了解一下。本文将介绍一些非常实用的建议。 原文:Tips for using Docker Swarm mode in production 译者: Fundebug 为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。 如果你在单个生产节点上用过Docker,然后发...
    阅读全文 →
  • 【案例】乐视电商云的整体架构与技术实现

    1. 电商系统发展过程 电商网站在不同时期的架构复杂度有所不同: 初创期:商品类型少,业务复杂度低,系统架构简单。采用高可用数据库、分布式缓存、文件存储等基本组件就可满足需求。 发展期:数据量、业务复杂度、系统复杂度、计算资源需求都剧增。则需要业务拆分并独立部署,采用CDN、高可用数据库、分布式缓存、分布式消息队列、分布式文件存储等。 电商技术基础架构图,如下所示: 2. 高速发展期的电商面临的问题 2.1 业务的快速扩张、资源需求快速扩张,但利用率低下 企业的主要目标是在市场上抢得先...
    阅读全文 →
  • 【案例】谈唯品会的峰值系统应对实践

    区别于其他网购品牌唯品会定位是“一家专门做特卖的网站”, 商业模式为“名牌折扣+限时抢购+正品保险”,即“闪购”(flash sales)模式。每天上新品,以低至1折的深度折扣及充满乐趣的限时抢购模式,为消费者提供一站式优质购物体验, 这种闪购限时特卖业务特点决定了网站随时都需要处理高并发、大流量的用户请求。大量买家在每次新的品牌档期上线后,大量涌入,抢购商品,造成网站承担大量流量。尤其碰到热门商品,网站并发访问剧增,会造成整个网站负载过重,响应延迟,严重时甚至会出现服务宕机的情况。 另外唯品...
    阅读全文 →
  • 【分享】100+个MySQL调试和优化技巧

    MySQL是一个功能强大的开源数据库。随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限。这里是101条调节和优化MySQL安装的技巧。一些技巧是针对特定的安装环境的,但这些思路是通用的。我已经把他们分成几类,来帮助你掌握更多MySQL的调节和优化技巧。 MySQL 服务器硬件和操作系统调节 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多。 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读取的,它的速度很慢。 使用电池供电的RA...
    阅读全文 →
  • 【分享】亿级Web系统的容错性建设实践

    【背景介绍】 三年多前,我在腾讯负责的活动运营系统,因为业务流量规模的数倍增长,系统出现了各种各样的异常,那个时候,我7*24小时地没日没夜处理告警,周末和凌晨也经常上线,疲于奔命。后来,当时的老领导对我说:你不能总扮演一个“救火队长”的角色, 要尝试从系统整体层面思考产生问题的根本原因,然后推进解决。我幡然醒悟,“火”是永远救不完的,让系统能够自动”灭火”,才是解决问题的正确方向。简而言之,系统的异常不能总是依赖于“人”去恢复,让系统本身具备“容错”能力,才是根本解决之道。三年多过去了...
    阅读全文 →
  • 【工作】Nginx 实现域名的登录验证功能

    摘星怪  /
     / 工作记录, 应用服务
    【背景说明】 研发有个需求,访问公司某个域名下的某个url时候需要认证,只有输入正确的用户密码才允许访问web内容。 【实现思路】 Nginx服务中的"ngx_http_auth_basic_module"模块可以实现此要求,默认情况下编译安装完nginx后,就已经安装启用了ngx_http_auth_basic_module模块,如果不需要这个模块,可以加上 --without-http_auth_basic_module关闭。 ngx_http_auth_basic_module模块指令: 语法: auth_basic string | off; 默认值: auth_basic off; 作用:默认表示不开启认证,后面如果跟上字符,这些字符会...
    阅读全文 →
  • 【分享】Shell 脚本知识点总结

    摘星怪  /
     / 自动运维
    使用 read 命令从 stdin 获取输入并赋值给 PERSON 变量,最后在 stdout 上输出 定义变量 语法格式: variableName="value" 变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则: 首个字符必须为字母(a-z,A-Z) 中间不能有空格,可以使用下划线(_) 不能使用标点符号 不能使用bash里的关键字(可用help命令查看保留关键字) 使用变量 echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情...
    阅读全文 →
  • 【工作】Centos 6.5 PHP 5.3 yum升级到5.5、5.6、5.7版本方法

    系统环境: OS:CentOS 6.5 php version:  5.3.3 1.卸载系统已有php # yum remove php*   注意:对于线上环境运行上面的命令时候,确保机器没有对外提供业务,否则执行后会导致业务异常。 2.安装Remi的YUM源 Remi repository是包含最新版本 PHP 和 MySQL 包的 Linux 源,由 Remi 提供维护。有个这个源之后,使用 YUM 安装或更新 PHP、MySQL、phpMyAdmin 等服务器相关程序的时候就非常方便了。 CentOS 6 Yum源: # rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm # rp...
    阅读全文 →
  • 【工作】线上Nginx升级OpenSSL版本防止安全漏洞

    摘星怪  /
     / 工作记录
    背景说明: 最近公司用网藤对网站业务进行了风险分析,发现了OpenSSL漏洞,由于线上的OpenSSL版本过旧,现在需要着手升级,公司的Web Server是Nginx,而Nginx安装时分为动态编译和静态编译OpenSSL两种方式,所以先查看是由那种方式安装的。 一、判断webserver是动态编译还是静态编译ssl的两种方法: 1.查看Nginx编译参数 输入以下指令,查看Nginx的编译参数: # /opt/nginx/sbin/nginx -V   nginx version: nginx/1.4.7 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)  TLS SNI support enabled confi...
    阅读全文 →
  • 【分享】JVM内存、GC原理、内存溢出总结

    一、JVM内存介绍: Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机。Tomcat的内存溢出本质就是JVM内存溢出,JVM管理两种类型的内存,堆和非堆。按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。   堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”。简单来说堆就是Java代码可及的内存,是留给开发人员使用的;   非堆就是JVM留给自己用的,所以方法区、JVM内部处理或优化所需的内...
    阅读全文 →
  • 【分享】JVM性能调优监控工具总结

    摘星怪  /
     / 基础知识
    【写在前面】 在平时的运维工作中,我们经常会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 导致服务器CPU或者内存飙高影响线上业务,对于解决以上问题,我们常用的JVM性能调优监控工具有:jps、jstat、jstack、jmap、jhat、hprof、jinfo   如果想要查看Java进程中线程堆栈的信息,可以选择jstack,如果要查看堆内存,可以使用jmap导出并使用jhat来进行分析,包括查看类的加载信息,GC算法那,对象的使用情况等,还可以使用jstat来对JVM进...
    阅读全文 →
  • 【分享】Docker五种存储驱动原理及应用场景和性能测试对比

    Docker最开始采用AUFS作为文件系统,也得益于AUFS分层的概念,实现了多个Container可以共享同一个image。但由于AUFS未并入Linux内核,且只支持Ubuntu,考虑到兼容性问题,在Docker 0.7版本中引入了存储驱动, 目前,Docker支持AUFS、Btrfs、Device mapper、OverlayFS、ZFS五种存储驱动。 就如Docker官网上说的,没有单一的驱动适合所有的应用场景,要根据不同的场景选择合适的存储驱动,才能有效的提高Docker的性能。如何选择适合的存储驱动,要先了解存储驱动原理才能更好的判断,本文介绍一下Docker五种存储驱动...
    阅读全文 →
  • 【分享】10个最经典的 MySQL 数据库运维实战案例

    摘星怪  /
     / 数据存储
        今天就给大家列举 MySQL 数据库中最经典的十大错误案例,并附有处理问题的解决思路和方法。希望能给刚入行或数据库爱好者一些帮助,今后再遇到任何报错,我们都可以很淡定地去处理。     学习任何一门技术的同时,其实就是自我修炼的过程。沉下心,尝试去拥抱数据的世界! 案例一:Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行) 问题还原: mysql> show variables like ‘%max_connection%’; | Variable_name   | Value | max_connections | 151   | ...
    阅读全文 →
  • 【分享】Linux下的Squid的配置详解

    一. 代理服务简介 1. 什么是Squid代理服务器(Proxy Server) Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户象要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。   目前,Squid 可以代理HTTP, FTP, GOPHER, SSL 和 WAIS 协议.   1.1 常用反向代理及缓存软件对比: ...
    阅读全文 →
  • 【工作】解决ACPI Error: No handler for Region错误导致linux系统自动重启

    报错现象: 线上有台服务器运行了了大概半年多,突然收到报警服务器重启了,可以确定不是人为操作导致的重启,以下是排查过程。   服务器品牌:Dell PowerEdge R720  系统版本:CentOS Linux release 7.1.1503 内核版本:3.10.0-229.el7.x86_64   查看messages日志报错信息如下: # tail -1000 /var/log/messages | grep -i error   查看dmesg报错信息如下: # dmesg | grep -E "error|Error|ERROR|fail|Fail|FAIL"  报错原因: 由于BIOS中开启了中断重映射,在ERST(芯片集中的错误校验表)校验时发生错误,...
    阅读全文 →