gofmt -w hello.go 写入格式化代码文件
gofmt hello.go 查看格式化代码文件i
程序猿者,用之则行,舍之则藏。
gofmt -w hello.go 写入格式化代码文件
gofmt hello.go 查看格式化代码文件i
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;#引入配置文件
events {
worker_connections 1024;
}
http {
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
index index.php index.html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
# location / {
# }
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
#server {
#listen 80;
#listen [::]:80;
# server_name www.wordwwwp.com;
# proxy_connect_timeout 300s;
# proxy_send_timeout 300s;
# proxy_read_timeout 300s;
# fastcgi_send_timeout 300s;
# fastcgi_read_timeout 300s;
# location / {
# proxy_pass http://127.0.0.1:8080;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection ‘upgrade’;
# proxy_set_header Host $host;
# proxy_cache_bypass $http_upgrade;
# try_files $uri $uri/ =404;
# }
#}
upstream wordp {#代理到8080端口
server localhost:8080;
}
server {
listen 80;
server_name www.wordp.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://wordp/;#注意点,必须要有最后的‘/’
}
}
upstream bbs {#代理到8081端口
server localhost:8081;
}
server {
listen 80;
server_name www.bbs.com;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://bbs/;#注意点,必须要有最后的‘/’
}
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate “/etc/pki/nginx/server.crt”;
# ssl_certificate_key “/etc/pki/nginx/private/server.key”;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景
解耦
可恢复性
缓冲(生产大于消费时)
灵活性&峰值处理
异步通信
发布订阅(一对多,消费数据之后不会清楚数据,两种:消费者主动拉(缺点:需要维护一个长连接),队列推送(缺点:消费不了,系统崩溃))
点对点(一对一,消费者主动拉取数据,消息收到后清除消息)
生产者
消费者
消费者组
kafka 高性能的原因:
对于一个集群中需要吧topic分成多少个分区,主要取决于业务方面需要满足多大的吞吐量,然后通过调整分区以及合理的配置来提高性能。
零拷贝:
传统的读取文件数据并发送到网络的步骤如下:
定义:
两个进程或线程之间传送数据或信号的一些技术或方法。每个进程都有自己独立的系统资源,彼此隔离。为了是不同进程之间相互访问资源进行协调工作,才需要进程间通信。
进程通信目的:
数据传输
共享数据
进程控制
进程通信实现方式:
管道,命名管道,消息队列,信号,信号量,共享内存,套接字socket
高流量,大并发:
1.即时聊天
2.战旗TV
3.虎牙直播(特点:并发量大,长连接,流量大)
4.YY语音
应用:互联网,移动通信,企业软件,云计算,网络游戏,物联网,车联网。
1.异步,并行,高性能
2.纯C编写
3.php扩展(重新定义PHP)
1.异步多线程服务器及客户端
2.异步mysql,redis,数据库连接池,任务队列
3.http/websocket服务器/客户端
4.异步文件读写
5.swoole2.0支持协程
1.脱离原站部署
2.预测,测试,监控
1.高可用:双活
2.高并发:负载均衡,数据过滤和安全
1.静态页面:cdn加速,网址隐藏,页面压缩,缓存机制
2.动态页面:排队,异步,资质抢购
用户:量大,坏人
地域:全国/地区 (cdn加速)
业务流程:前台,后台
第一层:商品展示层
第二层:用户登记层
第三层:数据接入层
第四层:数据处理层
第一层:
1.页面优化:图片,js,页面,压缩
2.cdn加速,oss存储
3.隐藏跳转页面:修改js,或修改html代码,双页面
1、在web应用中,我们每次访问PHP,就建立一个PHP进程,当然也会建立至少一个PHP线程。
2、PHP使用pcntl来进行多进程编程
3、PHP中使用pthreads来进行多线程编程
4、nginx的每个进程只有一个线程,每个线程可以处理多个客户端的访问
5、php-fpm使用多进程模型,每个进程只有一个线程,每个线程只能处理一个客户端访问。
6、apache可能使用多进程模型,也可能使用多线程模型,取决于使用哪种SAPI.
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
memory leak会最终会导致out of memory!
内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
1.泄漏原因:
一.没有及时释放大变量
二.php-fpm造成的内存泄漏。
三.就是第三方扩展本身实现存在问题
解决办法:
临时办法:查看php-fpm内存占用情况 # ps -ylC php-fpm –sort:rss //按rss排序 直接kill -9 pid号(或cron定时脚本清理)
针对原因一:用完及时销毁变量
针对原因二:配置优化
1.php-fpm.conf中有个参数pm.max_requests,等同于PHP_FCGI_MAX_REQUESTS。意思是一个fpm进程处理多少个请求后自动杀掉另起新进程(默认关闭,开启,适当降低该值)。
一般通过主从复制的方式来同步数据,实现数据安全,再通过读写分离来提升数据库的高并发负载能力。
1. master在二进制日志记录这些改变,通知存储引擎提交事物。
2. Slave将master的binary log复制到其中的中继日志。
首先从mysql服务器开始一个工作线程I/O线程,I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master。他会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
3.Sql线程从中继日志中读取事件,重放其中的事件而更新slave的数据,使其与master的数据一致。
异步复制:MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。
全同步复制:只当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。
半同步复制:介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。
读写分离就是只在mysql主服务器上写,只在mysql从服务器上读。基本原理是让主数据库处理事务性查询,而从数据库处理select查询。数据库复制被用来把事务性查询导致的变更同步到集群中的数据库。
目前较为常见的mysql读写分离有两种:
1、 基于程序代码的内部实现
在代码中根据select、insert进行路由分类,这类方法也是目前生产环境中较为常用的,优点是性能较好,因为在程序代码中实现,不需要增加额外的设备作为硬件开支;缺点是需要研发人员来实现,运维人员无从下手。
2、 基于中间代理层实现
代理一般位于客户端和服务器之间,代理服务器接收到客户端请求后通过判断后转发到后端数据库。如下有两个常用代理:
Mysql-proxy:其为mysql的开源项目,通过其自带的lua脚本进行sql判断,虽然是mysql官方产品,但是mysql官方并不建议其使用到生产环境中。
Amoeba:由陈思儒开发,该程序由Java语言进行开发。这个软件致力于mysql的分布式数据库前端代理层,它主要为应用层访问mysql的时候充当sql路由功能。Amoeba能够完成多数据源的高可用、负载均衡、数据切片等功能。
前提:order by已经使用索引 using index级别,排序类型一致,要么升序要么降序
原因:
(1)当query的字段不是TEXT|BLOB切大小小于max_length_for_sort_data时,会使用单路排序,否者使用双路排序.
(2)数据大小可能超出sort_buffer_size,导致创建临时表合并排序,多次IO