应用服务器技术
文章平均质量分 86
菠萝-琪琪
这个作者很懒,什么都没留下…
展开
-
高性能框架的基石-epoll
一、背景1.程序员的三高高并发,高性能,高可用2.高性能框架redis:为什么那么快?netty:广泛使用的Java网络编程框架dubbo:高性能的Java rpc框架kafka,nginx这一切基石,epoll。概念:epoll是linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。---百度百科二、前言在了解epol.原创 2021-06-03 11:02:33 · 399 阅读 · 1 评论 -
JVM-G1 性能调优思路与实战
现在大多数公司的Java生产版本都是再JDK8,所以本次性能调优主要针对G1来展开GC的主要回收区域就是年轻代(young gen)、老年代(tenured gen)、持久区(perm gen),在jdk8之后,perm gen消失,被替换成了元空间(Metaspace),元空间会在普通的堆区进行分配。垃圾收集为了提高效率,采用分代收集的方式,对于不同特点的回收区域使用不同的垃圾收集器。系统正常运行情况young是比较频繁的,full gc会触发整个heap的扫描和回收。在G1垃圾收集器中,最好的优化状原创 2021-04-16 15:14:46 · 3308 阅读 · 0 评论 -
Flink 对于TCP背压的处理
当消费者的消费速率低于生产者的发送速率时,会造成背压,此时消费者无法从TCP缓存区中读取数据,因为它无法再从内存池中获取内存,从而造成TCP通道阻塞。生产者无法把数据发送出去,这就使生产者不再向缓存队列中写入数据,从而降低了生产速率。当消费者的消费速率提升且TCP通道不再阻塞时,生产者的发送速率又会得到提升,整个链路运行恢复正常。TCP的流量控制中有个非常重要的概念——TCP窗口。TCP窗口的大小是可变的,因此也叫滑动窗口。TCP窗口本质上就是描述接收方的TCP缓存区能接收多少数据的,发送方可根据这原创 2021-04-09 21:21:03 · 807 阅读 · 0 评论 -
Netty 自定义编码、解码器案例
Netty内置了很多编码、解码器,例如MsgPack、Protobuf,这些二进制编码器的性能都非常高,远远高于Java内置的序列化、反序列化的性能但是出于各种原因,我们有时候需要自定义编码、解码,一般做法都是将消息分为几段(消息头初始标记、消息体长度标识、消息校验Token、消息体内容),通过预定义的各个分段的长度直接获取进行匹配校验Netty也提供了各种扩展口给到上层应用自行扩展,下面就是一个Demo案例定义message类,消息的主类package netty.customco.原创 2021-04-07 22:17:08 · 826 阅读 · 0 评论 -
Netty中ChannelOption属性含义
属性 含义 ChannelOption.SO_KEEPALIVE Channeloption.SO_KEEPALIVE参数对应于套接字选项中的SO_KEEPALIVE,该参数用于设置TCP连接,当设置该选项以后,连接会测试链接的状态,这个选项用于可能长时间没有数据交流的连接。 当设置该选项以后,如果在两小时内没有数据的通信时,TCP会自动发送一个活动探测数据报文。 ChannelOption.ALLOCATOR 也是默认值,使用对象池,重用缓冲区 Cha原创 2021-04-03 22:37:19 · 628 阅读 · 0 评论 -
Linux系统mmap内存映射机制原理
什么是mmap?mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享映射逻辑图多个进程同时映射到一个文件如何保证写安全呢?若存在上..原创 2021-03-24 10:23:40 · 6809 阅读 · 0 评论 -
Linux-IO全整理:BIO/NIO/IO多路复用解析
BIO 同步阻塞BIO是Blocking IO的意思。在类似于网络中进行read,write,connect一类的系统调用时会被卡住。举个例子,当用read去读取网络的数据时,是无法预知对方是否已经发送数据的。因此在收到数据之前,能做的只有等待,直到对方把数据发过来,或者等到网络超时。对于单线程的网络服务,这样做就会有卡死的问题。因为当等待时,整个线程会被挂起,无法执行,也无法做其他的工作。于是,网络服务为了同时响应多个并发的网络请求,必须实现为多线程的。每个线程处理一个网络请求。线..原创 2021-03-23 17:40:12 · 267 阅读 · 0 评论 -
互联网新概念:云原生
在进入21世纪后成长起来的新一代公司,已经找到了更好的做事方法。谷歌公司是一个伟大的创新者,它和其他一些互联网巨头一起,发展出了新的IT模式。据估计,谷歌在其世界各地的数据中心里运行着200万台服务器,那么是怎么做到得呢?图展示了一个系统的示意图,它几乎经常描述的“坏”系统相反这个系统的目标如下:■ 简单且可以频繁地在生产环境中进行发布。■ 运维具有稳定性和可预测性。你应该已经熟悉了这些因素的反面因素:■ 碎片化的变化会造成发布缓慢和不稳定,可重复性则相反。■ 有风险的部署会导致原创 2021-03-15 22:13:30 · 293 阅读 · 1 评论 -
Prometheus监控入门级使用教程
什么是Prometheus?Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能原创 2021-03-07 22:08:18 · 5420 阅读 · 0 评论 -
Netty 入门教程
Netty是Java程序员必须要掌握的一项技能,Netty是一个非常优秀的网络编程框架,熟练掌握可以让我们省下很大一部分网络编程的工作Netty是什么? 官方定义:Netty 是一个异步事件驱动的网络应用框架,用于快速开发可维护的高性能服务器和客户端。 简单地说Netty封装了JDK的NIO,不用再写一大堆复杂的代码。既然代替了原生的NIO,肯定有比它好的理由,主要有如下几点: 1.Netty底层IO模型可以随意切换,比如可以从NIO切换到BIO,但一般很少会这么做。 2.Net原创 2021-03-04 11:06:10 · 725 阅读 · 2 评论 -
全面分析分布式监控CAT
CAT(Central Application Tracking)是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,基本接入了美团上海侧所有核心应用。目前在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用,为美团各业务线提供系统的性能指标、健康状况、监控告警等。项目的开源地址是http://github.com/dianping/cat。背景介绍CAT整个产品研发是从2011年底开始的,当时正是大众点评从.NET迁移到Java的核心起步阶段。当初大众点评已经有核心的基.原创 2021-03-01 20:50:54 · 1040 阅读 · 1 评论 -
Redis-Mysql 数据一致性问题解决框架:Canal 设计详解
前言redis和mysql如何保证数据一致?其实这个问题是个伪命题,因为不可能做到100%场景的绝对实时一致性,只能做到软一致或者最终一致性,基本上比较靠谱的就是利用Canal来做最终一致性一. canal概述canal是Alibaba旗下的一款开源项目,纯Java开发.它是基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持mysql。应用场景:1.数据同步,比如:做在线、离线数据库之间的数据同步操作; 2.数据消费,比如:需要根据关注的数据库表的变化,做搜.原创 2021-02-19 20:04:49 · 1780 阅读 · 3 评论 -
消息中间件设计探究
消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。 当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify、MetaQ、RocketMQ等。 本文不会一一介绍这些消息队列的所有特性,而是探讨一下自主开发设计一个消息队列时,你需要思考和设计的重要方面。过程中我们会参考这些成熟消息队列的很多重要思想。 本文首先会阐述什么时候你需要一个消息队列原创 2021-02-05 13:32:16 · 252 阅读 · 0 评论 -
JWT 新一代认证登录方案
JWT 全称是 JSON Web Token,是目前非常流行的跨域认证解决方案,在单点登录场景中经常使用到。有些人觉得它非常好用,用了它之后就不用在服务端借助 redis 实现认证过程了,但是,还有一部分人认为它生来就有缺陷,根本不能用。传统的认证方式从一个登录场景说起你平时用过那么多网站和 APP,其中有很多都是需要登录的吧,那咱们就选一个场景出来说说。以一个电商系统为例,如果你想要下单,首先需要注册一个账号,拥有了账号之后,需要输入用户名(比如手机号或邮箱)、密码完成登录过程。之后你原创 2021-02-03 22:20:22 · 353 阅读 · 0 评论 -
TCP 协议中的滑动窗口使用
滑动窗口协议:TCP协议的使用 维持发送方/接收方缓冲区 缓冲区是 用来解决网络之间数据不可靠的问题,例如丢包,重复包,出错,乱序在TCP协议中,发送方和接受方通过各自维护自己的缓冲区。通过商定包的重传机制等一系列操作,来解决不可靠的问题。问题一:如何保证次序?提出问题:在我们滑动窗口协议之前,我们如何来保证发送方与接收方之间,每个包都能被收到。并且是按次序的呢?发送方发送一个包1,这时候接收方确认包1。发送包2,确认包2。就这样一直下去,知道把数据完全发送完毕,这样就结束了.原创 2021-02-01 20:51:05 · 421 阅读 · 0 评论 -
理解分布式事务
分布式事务分布式事务顾名思义就是要在分布式系统中实现事务,它其实是由多个本地事务组合而成。对于分布式事务而言几乎满足不了 ACID,其实对于单机事务而言大部分情况下也没有满足 ACID,不然怎么会有四种隔离级别呢?所以更别说分布在不同数据库或者不同应用上的分布式事务了。2PC2PC(Two-phase commit protocol),中文叫二阶段提交。二阶段提交是一种强一致性设计,2PC 引入一个事务协调者的角色来协调管理各参与者(也可称之为各本地资源)的提交和回滚,二阶段分别指的..原创 2021-01-31 20:22:33 · 103 阅读 · 0 评论 -
聊聊JNDI
概念JNDI(Java Naming and Directory Interface ),类似于在一个注册中心注册一个东西,以后要用的时候,只需要根据名字去注册中心查找,注册中心返回你要的东西。web程序,我们可以将一些东西(比如数据库相关的)交给服务器软件去配置和管理(有全局配置和单个web程序的配置),在程序代码中只要通过名称查找就能得到我们注册的东西,而且如果注册的东西有变,比如更换了数据库,我们只需要修改注册信息,名称不改,因此代码也不需要修改。String jndiName= ...;原创 2021-01-17 22:37:36 · 86 阅读 · 0 评论 -
什么是Redis NUMA陷阱!
NUMA陷阱的概述:我们公司的基础架构部有个云Redis平台,其中Redis实例在申请的时候可以自由选择需要的内存的大小。然后就引发了我的一个思考,Redis单实例内存最大申请到多大比较合适?假设母机是64GB内存的物理机,如果不考虑CPU资源的的浪费,我是否可以开一个50G的Redis实例?于是我在Google上各种搜索,讨论这个问题的人似乎不多。找到唯一感觉靠谱点的答案,那就是单进程分配的内存最好不要超过一个node里的内存总量,否则linux当该node里的内存分配光了的时候,会在自己node转载 2021-01-10 21:54:14 · 526 阅读 · 0 评论 -
Consul 注册中心集群搭建
简介之前公司一直用的是Eureka 1.X版本,但是自从SpringBoot升级到2.X版本后Eureka团队对外宣布不再开源且Eureka 2.X版本不在维护,这就一下子懵逼了,开始寻找Eureka的替代方案,最终选择使用Consul进行服务发现以及服务管理。网上有很多关于Consul的介绍和对比,我这里也不献丑了,大家搜索的时候可能会经常看到这么一个表格,此表格采摘自:https://...原创 2018-10-17 13:53:42 · 1826 阅读 · 1 评论 -
解决nginx访问日志记录post数据
1. 问题描述nginx 在获取post数据时候,如果是中文,则转换成16进制显示在日志文件中,如下图所示。日志格式为: log_format postdata '$remote_addr | $request_body | $resp_body';此篇文章记录下解决此次问题的过程。最新版本解决方式适合nginx 1.11.8 以上版本在nginx 1.11.8 以上版本中log_format 增...原创 2018-02-28 12:41:49 · 14438 阅读 · 0 评论 -
Linux 根据目录名Kill此目录下执行的所有进程
常用的根据进程号杀掉进程,拿Tomcat举例说明:在linux下查询tomcat进程:ps -ef | grep tomcat。删除tomcat进程 用kill -9 进程号 强制杀进程。 下面的是根据目录名Kill此目录下执行的所有进程原创 2017-02-16 22:53:43 · 4999 阅读 · 1 评论 -
SpringBoot + SolrCloud + Zookeeper 集群搭建
搜索引擎大家用的比较多的应该是Solr和Elasticsearch,两者之间的区别就不在此文做阐述了,一个支持实时查询轻量级,一个数据结构更丰富更稳定,我公司使用的是Solr,因为单点的Solr在千万级数据进行全量建立索引时有时会产生奔溃,为了搭建一个高可用的Solr开始了优化重构之路。Zookeeper 集群搭建篇:首先搭建Solr集群需要借助Zookeeper这个分布式调度服务工具,根...原创 2018-09-19 14:53:33 · 2920 阅读 · 3 评论 -
Java NIO以及其他线程模型原理解析
IO基本概念Linux环境Linux的内核将所有外部设备都可以看做一个文件来操作。那么我们对与外部设备的操作都可以看做对文件进行操作。我们对一个文件的读写,都通过调用内核提供的系统调用;内核给我们返回一个file descriptor(fd,文件描述符)。对一个socket的读写也会有相应的描述符,称为socketfd(socket描述符)。描述符就是一个数字(可以理解为一个索引),指向内...原创 2018-08-06 09:38:18 · 4484 阅读 · 0 评论 -
.htaccess技巧: URL重写(Rewrite)与重定向(Redirect)
URL重定向是.htaccess的重头戏,它可以将长地址转为短地址、将动态地址转为静态地址、重定向丢失的页面、防止盗链、实现自动语言转换等。笔者觉得难点是在正则表达式的运用和理解上。有关htaccess的正则表达式用法,请查阅本站《.htaccess正则表达式》一文。一、准备开始:mod_rewrite实现所有这些神奇功能的模块叫做mod_rewrite,请确保你的服务器安装并启用转载 2017-04-20 16:59:27 · 1261 阅读 · 0 评论 -
Linux 下使用脚本进行SSH授权及命令操作
使用 expect 进行操作:#!/usr/bin/expectset port 22set user XXXset host XXXset password XXXset timeout -1spawn ssh -D $port $user@$hostexpect { "(yes/no)" { send "yes\r"; exp_continue原创 2017-03-09 11:25:43 · 2411 阅读 · 0 评论 -
用Awstats工具来分析httpd和tomcat的访问日志
用Awstats工具来分析httpd和tomcat的访问日志准备工作:Awstats是由perl语言编写的,所以要首先准备好awstats的运行环境。# yum install –y perl*一、首先,要安装apache服务器,并且启动httpd服务。我的apache是yum安装的,配置文件路径为:/etc/httpd/conf/httpd.conf下载awstats转载 2017-02-16 22:57:35 · 572 阅读 · 0 评论 -
Linux 系统挂载数据盘
适用系统:非IO优化+SSD云盘Linux(Redhat , CentOS,Debian,Ubuntu)实例,IO优化实例+SSD云盘数据盘分区挂载建议使用脚本:工具:auto_fdisk_ssd.sh* Linux的云服务器数据盘未做分区和格式化,可以根据以下步骤进行分区以及格式化操作。下面的操作将会把数据盘划分为一个分区来使用。 1、查看数据盘在没有分原创 2017-02-16 22:54:56 · 213 阅读 · 0 评论 -
Apache ZooKeeper 中选举算法Paxos详解
Apache ZooKeeper中Paxos选举算法详解翻译 2016-12-21 11:39:02 · 485 阅读 · 0 评论 -
Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty等一些常见服务器的区别比较和理解
先说Apache和Tomcat的区别: Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。 在Apache基金会里面ApacheServer永远会被赋予最大的支持,毕竟大儿子最亲嘛,而Apache的开源服务器软件Tomcat同样值得关注,毕竟Tomcat是开源免转载 2016-10-20 15:48:34 · 519 阅读 · 0 评论 -
Maven 自动部署到Tomcat
1、配置Tomcat访问权限,要打开tomcat的manager功能;在conf文件夹下的tomcat-users.xml的标签内添加如下内容 启动tomcat访问http://localhost:8080/manag转载 2016-09-14 17:08:43 · 346 阅读 · 0 评论 -
tomcat 性能优化
tomcat默认参数是为开发环境制定,而非适合生产环境,尤其是内存和线程的配置,默认都很低,容易成为性能瓶颈。 tomcat内存优化linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.tim转载 2016-08-30 22:22:12 · 326 阅读 · 0 评论 -
深入浅出讲述提升 WordPress 性能的九大秘笈
在建站和 web 应用程序交付方面,WordPress 是全球最大的一个平台。全球大约四分之一 的站点现在正在使用开源 WordPress 软件,包括 eBay、 Mozilla、 RackSpace、 TechCrunch、 CNN、 MTV、纽约时报、华尔街日报 等等。最流行的个人博客平台 WordPress.com,其也运行在 WordPress 开源软件上。而 NGINX转载 2017-04-24 18:46:35 · 1979 阅读 · 0 评论 -
Maven + Eclipse 分模块开发,依赖打包部署
我们大型项目开发时可能每个人的分工都不一样,对应的模块任务也不同,那么就会需要使用到Maven的模块化功能,举个简单的例子:眼下有项目A、项目B、项目C,每个项目对应的业务都不同,但是存在20%左右的重复代码,一般的做法可能是Copy解决一切,但是更加完善的做法就是项目间互相引用,使得项目A、项目B、项目C的代码互相可见。1.首先在Eclipse中让项目代码互通,右击项目选择Propert原创 2017-06-14 13:51:28 · 2367 阅读 · 0 评论 -
使用chroot命令限制SSH用户的访问制造伪牢笼
将 SSH 用户会话限制访问到特定的目录内,特别是在 web 服务器上,这样做有多个原因,但最显而易见的是为了系统安全。为了锁定 SSH 用户在某个目录,我们可以使用 chroot 机制。在诸如 Linux 之类的类 Unix 系统中更改 root(chroot)是将特定用户操作与其他 Linux 系统分离的一种手段;使用称为 chrooted 监狱 的新根目录更改当前运行的用户进程及其子进程的明...转载 2018-06-12 22:03:43 · 2918 阅读 · 1 评论 -
Nginx 日志记录过滤某些IP
有些时候我们可能会有一些特殊需求,比如不希望日志记录某些指定的IP或者我们需要在接受的请求Header中过滤默写IP值,我们知道Nginx中记录真实IP的参数是$remote_addr,记录代理层IP的是$proxy_add_x_forwarded_for 但是$proxy_add_x_forwarded_for记录的是真实IP+代理IP,如果需要隐藏真实IP那么我们就需要在Ngin...原创 2018-06-12 22:02:08 · 4494 阅读 · 0 评论 -
Linux服务器 日志常用命令
查找访问频率最高的 URL 和次数:cat access.log | awk -F ‘^A’ ‘{print $10}’ | sort | uniq -c查找当前日志文件 500 错误的访问:cat access.log | awk -F ‘^A’ ‘{if($5 == 500) print $0}’查找当前日志文件 500 错误的数量:cat access.log | awk -F ‘^A’ ‘...原创 2018-04-20 09:25:29 · 1004 阅读 · 0 评论 -
Cenos7 安装配置Zabbix-Agent客户端
1.yum -y install zabbix-agent;2.安装完成后配置文件一般在 /etc/zabbix/zabbix_agentd.conf,打开把里面内容全部清空然后加入PidFile=/var/run/zabbix/zabbix_agentd.pidLogFile=/var/log/zabbix/zabbix_agentd.log #错误日志LogFileSize=0List...原创 2018-03-23 21:32:22 · 15306 阅读 · 0 评论 -
Java 操作Solr搭建高性能搜索引擎
目前比较适合Java的搜索引擎搭建一般会选用Solr,底层操作会使用Solrj交互,其实Solr也是基于Lucene。实施过程中发现网上很多关于Java集成Solr的文档都是基于Solr5+版本的,而对于Solr7+版本的文档很少,并且很多都是坑,所以花了不少时间把自己再部署过程中的经验分享出来。 首先去官网 Apache Solr官网 下载Solr的7.1,然后上传至服务器,原创 2017-11-17 17:24:32 · 5768 阅读 · 0 评论 -
Linux 常用实用命令整合
1.删除30分钟前的.sql结尾的文件find /xx/xx -nmin +30 -type f -name *.sql | xargs rm -f 2.linux下查询tomcat进程使用情况ps -ef | grep tomcat3.杀掉某个目录下的所有tomcat进程ps aufx|grep tomcat|grep 509|awk '{print $2}'原创 2017-09-13 15:17:00 · 318 阅读 · 0 评论 -
SpringBoot+Springcloud+SpringBootAdmin 服务发现注册与服务监控完美整合
Apache开源的SpringCloud与阿里开源的Dubbo一直是SOA架构服务调度框架的首选,前段时间公司尝试使用了Dubbo+Zookeeper架构模式,但是实践过程中发现几个比较重要的缺陷,虽然也有比较好的优势但是此文就不阐述Dubbo的优势了,主要说下为何遗弃的几点原因供大家参考:1.Dubbo虽然对代码的植入很小,但是在对提供者与消费者分层时,需要使用Maven的依赖开发功能,看似原创 2017-06-30 19:38:15 · 18957 阅读 · 5 评论