Lanyon 记录下日常工作与学习哈~,还有技术分享哦。。🎉

浅谈nginx服务代理

nginxdocker安装

nginx服务安装,我是用docker安装的,mac系统编译nginx源码安装有点问题。

docker pull nginx # 从docker仓库拉取nginx镜像
# nginx目录挂载参考此文章,https://blog.csdn.net/baidu_21349635/article/details/102738972
docker run --name nginx-0807 -v /Users/madong/software/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /Users/madong/software/nginx/conf.d:/etc/nginx/conf.d \
-v /Users/madong/software/nginx/html:/usr/share/nginx/html \
-v /Users/madong/software/nginx/logs:/var/log/nginx -p 8080:80 -d nginx
# nginx服务验证,curl有返回html内容时,则表示nginx服务启动成功了; /etc/nginx存nginx配置、/usr/share/nginx存在html、/var/log/nginx/存放nginx的access_log
curl 'http://localhost:8080/'

nginx也支持热更新,当修改nginx配置后,可使用nginx -s reload使修改的配置生效,当access.log文件特别大时,可使用nginx -s reopen切割日志。

ReadMore »

Go内存分配与GC

Go语言GMP介绍

Go语言相比Java,有更好的并发能力(GMP模型),同时其占用的服务器资源也较少,了解一下GMP的理念。从操作系统层面来看,线程是指内核级线程,是操作系统最小调度单元,创建、销毁、调度交由内核完成,可充分利用多核。协程(用户线程)与线程存在M:1的映射关系,从属于同一个内存级线程,无法并行,并且,一个协程阻塞会导致从属同一线程的所有协程无法执行。

Goroutine

Golang优化后的协程,其有如下特点:1)与线程存在映射关系,为M:N;2)创建、销毁、调度在用户态完成,对内核透明,足够轻便;3)可利用多个线程,实现并行;4)通过调度器的斡旋,实现和线程间的动态绑定和灵活调度;5)栈空间大小可动态扩缩,因地制宜;

/runtime/proc.go的代码注释中,有对GMP的解释,其核心数据结构在/runtime/runtime2.go:

ReadMore »

golang sql体系及orm实现

golang sql标准库研究

抽象接口定义

database/sql/driver/driver.go关于数据库驱动模块下各核心interface主要包括:

  • Connector: 抽象的数据库连接器,需要具备创建数据库连接以及返回从属的数据库驱动的能力;
  • Driver: 抽象的数据库驱动,具备创建数据库连接的能力;
  • Conn: 抽象的数据库连接,具备预处理sql以及开启事务的能力;
  • Tx: 抽象的事务,具备提交和回滚的能力;
  • Statement: 抽象的请求预处理状态. 具备实际执行sql并返回执行结果的能力;
  • Result/Row: 抽象的sql执行结果;

ReadMore »

Elasticsearch核心技术与实战

在极客时间上学习elasticsearch课程,主要关注点在queryDSL语句以及集群的管理,在本地基于es 7.1来构建集群服务,启动脚本如下,同时在conf/elasticsearch.yml中添加xpack.ml.enabled: falsehttp.host: 0.0.0.0的配置(禁用ml及启用host):

bash> bin/elasticsearch -E node.name=node0 -E cluster.name=geektime -E path.data=node0_data -d
bash> bin/elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=node1_data -d
bash> bin/elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=node2_data -d
bash> bin/elasticsearch -E node.name=node3 -E cluster.name=geektime -E path.data=node3_data -d

docker容器中启动cerebro服务,用于监控elasticsearch集群的状态,docker启动命令如下:

bash> docker run -d --name cerebro -p 9100:9000 lmenezes/cerebro:latest

ReadMore »

大数据时代数据仓库Hive

Hadoop大数据平台及生态系统中,使用mapreduce模型进行编程,对广大用户来说,仍然是具有挑战性的任务。人们希望使用熟悉的SQL语言,对hadoop平台上的数据进行分析处理,这就是SQL On Hadoop系统诞的背景。

SQL on Hadoop是一类系统的简称,这类系统利用Hadoop实现大量数据的管理,具体是利用HDFS实现高度可扩展的数据存储。在HDFS之上,实现SQL的查询引擎,使得用户可以使用SQL语言,对存储在HDFS上的数据进行分析。

Apache Hive的产生

Hive是基于Hadoop的一个数仓工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的类SQL(HQL)查询功能,可以将HQL语句转换成为MapReduce任务进行运行。使用类SQL语句就可快速实现简单的MapReduce统计,不必开发专门的MapReduce应用。Apache Hive是由Facebook开发并开源,最后贡献给Apache基金会。

Hive系统整体3个部分:用户接口、元数据存储、驱动器(Driver)在Hadoop上计算与存储。

ReadMore »