Categories
php

php 7.4

安装php7.4

add-apt-repository ppa:ondrej/php
apt-get update

Categories
nodejs

pm2 loadbalance

pm2 负载均衡

pm2 start app.js -i 4

以1个主进程监听端口 4个副进程 处理nodejs请求进程

pm2 start app.js -i max

以cpu核心的数量处理nodejs请求进程

pm2 其实是利用nodejs cluster模块运行

查看http://nodejs.cn/api/cluster.html

单个 Node.js 实例运行在单个线程中。 为了充分利用多核系统,有时需要启用一组 Node.js 进程去处理负载任务。

cluster 模块可以创建共享服务器端口的子进程。

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`主进程 ${process.pid} 正在运行`);

  // 衍生工作进程。
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`工作进程 ${worker.process.pid} 已退出`);
  });
} else {
  // 工作进程可以共享任何 TCP 连接。
  // 在本例子中,共享的是 HTTP 服务器。
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('你好世界\n');
  }).listen(8000);

  console.log(`工作进程 ${process.pid} 已启动`);
}
$ node server.js
主进程 3596 正在运行
工作进程 4324 已启动
工作进程 4520 已启动
工作进程 6056 已启动
工作进程 5644 已启动
Categories
java

maven runnable jar

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>robin.tcpip.gateway.Main</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

mainClass 指定 可执行主类

执行 mvn package 可打包

打包成runnable jar 后可直接运行 且保内包含所有依赖的jar包

Categories
java

zuul 1.x

zuul 网关应用分 1.X 版本 和 2.X 版本 两者相差很大

以下详细说明zuul 1.X 版本

在原始在zuul-core 包中 所有请求是通过 com.netflix.zuul.http.ZuulServlet 在 /zuul/* 下建立servlet 入口

然后在 zuulServlet的service方法中 执行 zuulRunner 去处理请求

然后不同请求路径下会使用 zuulRunner里面的不同的 filterProcessor 去处理

譬如 :

静态路由的地址 由配置文件配置的路由器处理

微服务路由地址 由ribbon的提供路由策略 RibbonRoutingFilter

所有的这些处理请求filter 其实是把请求重发到对应的地址

再把响应结果返回给网关(转发)

具体实现http请求的框架可以配置 okhttp httpClient 等

和 spring-boot 整合后

springmvc 用 org.springframework.cloud.netflix.zuul.web.ZuulController

包装了zuulServlet (servletWrapper)

还是通过springMVC去处理网关!!!

Categories
go

beego

go语言实现的 类似ruby on rails 的http 服务框架

需要通过 bee命令 生成controller view model 等

灵活度上会弱于普通的http框架 但架构上会优于其他框架

Categories
docker

docker remote api

docker 服务 提供给其他服务通讯的api

默认通讯socket 在本机的

unix://var/run/docker.sock

而且 必须有root权限才能访问该socket

当设置环境变量

DOCKER_OPTS="-H=unix:///var/run/docker.sock -H=0.0.0.0:4232"  

默认在本机4232 端口开启 docker 远程访问服务

该remote api socket 支持http协议

当执行 curl localhost:4232/version 返回服务器docker 版本信息

具体的docker remote api :

获取容器清单

GET /containers/json 

创建新容器

POST /containers/create

监控容器

GET /containers/(id)/json

获取容器内进程信息

GET /containers/(id)/top

获取容器日志信息

GET /containers/(id)/logs

导出容器内容

GET /containers/(id)/export

启动容器

POST /containers/(id)/start

停止容器

POST /containers/(id)/stop

重启容器

POST /containers/(id)/restart

终止容器

POST /containers/(id)/kill

创建镜像

POST /images/create

利用容器创建镜像

POST /commit

获取镜像清单

GET /images/json

导入指定的路径文件

POST /images/(name)/insert

删除镜像

DELETE /images/(name)

推送镜像到Registry

POST /images/(name)/push

Tag镜像

POST /images/(name)/tag

搜索镜像

GET /images/search

查看镜像历史

GET /images/(name)/history

构建镜像

POST /build
Categories
go

go 基本入门

标准输入流输出流

import "fmt"

func main() {
   fmt.Println("Hello, World!")
}

等同于

import "fmt"
import "os"

func main() {
   fmt.Fprinf(os.Stdout, "HelloWorld") 
}

fmt 为格式化包 用作格式化输出

fmt.Println 标准输出流打印 (默认在标准输出流输出)

os.Stdout 才是标准输出流

os.Stdin 为标准输入流

os.Stderr 为标准异常流

基本流操作


fmt.Fprinf(os.Stdout, "HelloWorld") 

往某个输出流输出数据

fmt.Fprinf(xxxout, "HelloWorld") 

基本文件控制

socket控制

Categories
go

go 基本命令

运行某个go文件

go run xxx.go

编译go文件

go build hello.go 

查看go 文档 默认在本机6060 显示web文档 (只可本机访问)

godoc 

查看某个方法

go doc fmt.Println
Categories
java mysql

mycat 实例

mycat配置解释

再mycat2/conf/有配置文件

server.xml 定义数据库连接 用户

schema.xml 定义 虚拟表和实体表

rule.xml 定义分库逻辑(入库)

route.xml定义查询时实体表路由配置(查询)

简单按字段值分库
<!-- 按照学校名分表 -->
	<tableRule name="shardingBySchoolName">
		<rule>
			<columns>school_name</columns>
			<algorithm>shardingBySchoolName</algorithm>
		</rule>
	</tableRule>
<!-- 按照学校名分表 -->
	<function name="shardingBySchoolName" class="org.opencloudb.route.function.PartitionByFileMap">
		<property name="mapFile">shardingBySchoolName.txt</property>
		<property name="type">1</property>
		<property name="defaultNode">0</property>
	</function>

shardingBySchoolName.txt

爱享=0
中悦=1
DEFAULT_NODE=1
Categories
java

elasticsearch