curl

012.Nginx负载均衡

拟墨画扇 提交于 2020-07-28 10:56:18
一 负载均衡概述 1.1 负载均衡介绍 负载均衡是将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验。对于Web应用,通过负载均衡,可以将一台服务器的工作扩展到多台服务器中执行,提高整个网站的负载能力。其本质采用一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡。 二 Nginx负载均衡 2.1 优点 高并发连接 内存消耗少 配置文件非常简单 成本低廉 支持Rewrite重写规则 内置的健康检查功能 节省带宽 稳定性高 2.2 主要均衡机制 round-robin:轮询。以轮询方式将请求分配到不同服务器上。 least-connected:最少连接数。将下一个请求分配到连接数最少的那台服务器上。 ip-hash:基于客户端的IP地址。散列函数被用于确定下一个请求分配到哪台服务器上。 2.3 负载均衡策略 nginx的负载均衡策略可以划分为两大类:内置策略和扩展策略,扩展策略为第三方提供。 内置策略 轮询(默认):Nginx根据请求次数,将每个请求均匀分配到每台服务器; weight:加权轮询,加权轮询则是在第一种轮询的基础上对后台的每台服务赋予权重,服务器的权重比例越大,被分发到的概率也就越大。 least_conn:最少连接,将请求分配给连接数最少的服务器。Nginx会统计哪些服务器的连接数最少。 ip

uwsgi nginx 部署 flask

血红的双手。 提交于 2020-07-28 09:35:25
当前项目目录 . ├── app ├── app.log ├── app.py ├── config.py ├── manager.py ├── Pipfile ├── Pipfile.lock ├── __pycache__ │ ├── app.cpython-36.pyc │ ├── app.cpython-37.pyc │ └── view.cpython-36.pyc ├── uwsgi.ini └── uwsgi.pid app.py: from flask import Flask, request from flask_restful import Resource, Api import logging import json app = Flask(__name__) app.config['JSON_AS_ASCII'] = False handler = logging.FileHandler('app.log', encoding='UTF-8') logging_format = logging.Formatter( '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s') handler.setFormatter(logging

API 网关 Kong

允我心安 提交于 2020-07-28 08:43:15
什么是 API 网关? 所谓网关,主要作用就是连接两个不同网络的设备,而今天所讲的 API 网关是指承接和分发客户端所有请求的网关层。 为什么需要网关层?最初是单体服务时,客户端发起的所有请求都可以直接请求到该服务,但随着产品用户越来越多,单体应用存在显而易见的单点问题,除此之外,当单体应用大小升至几个 G 时,持续发布将会非常缓慢,所以服务的拆分成为了必然趋势。 当服务拆分为多个之后,我们不得不面临一个问题,就是如何控制用户请求到对应服务节点,于是网关层应运而生,它不仅可以负责负载均衡,还可以让它处理认证校验、请求限流、日志记录以及监控服务节点等等。 当然,网关层并不需要我们手动实现,市面上有很多 API 网关开源项目,比如 Zuul、Kong、Tyk 等,今天主要介绍 Kong。 安装 Kong Kong 是一个在 Nginx 中运行的 Lua 程序,由 lua-nginx-module 实现,和 Openresty 一起打包发行,支持多种操作环境下的安装,可以用来做 HTTP 基本认证、密钥认证、TCP、UDP、文件日志、API 请求限流、请求转发等等。 第一步,创建一个 docker 网络。 $ docker network create kong-net 创建用于存储 Kong 数据的数据库,可以使用 Cassandra 或 PostgreSQL,本示例采用

麒麟Kylin系统适配gStore图数据库系统

大憨熊 提交于 2020-07-28 08:26:11
麒麟Kylin系统适配gStore图数据库系统 作者: 梁剑明 日期: 2020年07月17日 适配系统版本 :Kylin 4.0 内核版本 :aarch64 gStore版本 :V0.8 1.环境要求 适配gStore图数据库系统V0.8版本,环境需求如下: 项目 需求 操作系统 Linux, 例如CentOS, Ubuntu、Kylin等 架构 x86_64 磁盘容量 根据数据集的大小 内存大小 根据数据集的大小 glibc 必须安装 version >= 2.14 gcc 必须安装 version >= 4.8 g++ 必须安装 version >= 4.8 make 必须安装 boost 必须安装 version >= 1.54 readline 必须安装 readline-devel 必须安装 libcurl-devel 必须安装 openjdk 如果使用Java api,则需要 openjdk-devel 如果使用Java api,则需要 requests 如果使用Python http api,则需要 node 如果使用Nodejs http api则需要 version >=10.9.0 curl-devel 如果使用php http api,则需要 pthreads 如果使用php http api,则需要 realpath 如果使用gconsole,则需要

万字长文!一次性弄懂 Nginx 处理 HTTP 请求的 11 个阶段

心已入冬 提交于 2020-07-28 04:22:45
本文涉及到的所有配置文件我已经放在了 Nginx 配置文件 ,大家可以自取。 Nginx 处理一个 HTTP 请求的全过程 前面给大家讲了 Nginx 是如何处理 HTTP请求头部的 ,接下来就到了真正处理 HTTP 请求的阶段了。先看下面这张图,这张图是 Nginx 处理 HTTP 请求的示意图,虽然简单,但是却很好的说明了整个过程。 Read Request Headers:解析请求头。 Identify Configuration Block:识别由哪一个 location 进行处理,匹配 URL。 Apply Rate Limits:判断是否限速。例如可能这个请求并发的连接数太多超过了限制,或者 QPS 太高。 Perform Authentication:连接控制,验证请求。例如可能根据 Referrer 头部做一些防盗链的设置,或者验证用户的权限。 Generate Content:生成返回给用户的响应。为了生成这个响应,做反向代理的时候可能会和上游服务(Upstream Services)进行通信,然后这个过程中还可能会有些子请求或者重定向,那么还会走一下这个过程(Internal redirects and subrequests)。 Response Filters:过滤返回给用户的响应。比如压缩响应,或者对图片进行处理。 Log:记录日志。

LAMP宿主机安装-php环境

徘徊边缘 提交于 2020-07-28 04:16:56
1. httpd 安装 rpm包 yum install httpd systemctl start httpd httpd -v Server version: Apache/2.4.6 (CentOS) Server built: Apr 2 2020 13:13:23 2. mysql 安装rpm包 wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm yum -y install mysql-community-release-el7-5.noarch.rpm yum install mysql-community-server 此中含有依赖( mysql-community-libs mysql-community-devel ),有此两个 libs和devel,php configure时mysql目录编译可不指定 mysql --version mysql Ver 14.14 Distrib 5.6.48, for Linux (x86_64) using EditLine wrapper 此中, /usr/bin/ apxs 安装包 yum install -y httpd-devel 3. PHP安装 wget http://cn2.php.net/distributions

Rolling cURL: PHP并发最佳实践【转】

爱⌒轻易说出口 提交于 2020-07-28 03:36:31
在实际项目或者自己编写小工具(比如新闻聚合,商品价格监控,比价)的过程中, 通常需要从第3方网站或者API接口获取数据, 在需要处理1个URL队列时, 为了提高性能, 可以采用cURL提供的curl_multi_*族函数实现简单的并发. 本文将探讨两种具体的实现方法, 并对不同的方法做简单的性能对比. 1. 经典cURL并发机制及其存在的问题 经典的cURL实现机制在网上很容易找到, 比如参考 PHP在线手册 的如下实现方式: function classic_curl($urls, $delay) { $queue = curl_multi_init(); $map = array(); foreach ($urls as $url) { // create cURL resources $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_NOSIGNAL

绕过移动端系统限制的 dlopen 库 byOpen

核能气质少年 提交于 2020-07-28 02:02:26
byOpen是一个绕过移动端系统限制的增强版dlfunctions库。 支持特性 Android 支持App中加载和使用Android系统库接口(即使maps中还没有被加载也支持)。 Android 7以上dlopen, System.load都是被限制调用的,虽然目前网上有 Nougat_dlfunctions 等库通过从maps中找so库来绕过加载限制。 不过对于app中还没被加载到maps的so库,这种方式就不行了。 而byOpen不仅支持fake dlopen方式从maps加载,还可以将还没加载到maps的so库绕过系统限制强行加载进来使用,实现更加通用化得dlopen。 注:目前的实现方式理论上还是比较通用的,至少我这Android 10上测试ok,但还没完整详细测试过,是否使用请自行评估。 相关原理 具体实现原理还是比较简单的,主要还是借鉴了 一种绕过Android P对非SDK接口限制的简单方法 的思想和实现方式。 虽然这篇文章中主要目的是为了绕过hide api,不过它里面使用的将自己假装成系统调用的方式,一样可以用到 System.loadLibrary 上去,让系统以为是系统自身在调用 System.loadLibrary 从而绕过Android N的classloader-namespace限制,将系统/system/lib中任意so库加载到maps中

Istio 1.6.3 发布-新特性与快速安装

北城以北 提交于 2020-07-28 01:47:13
Istio 1.6.3 发布了。Istio 是一个由谷歌、IBM 与 Lyft 共同开发的开源项目,旨在提供一种统一化的微服务连接、安全保障、管理与监控方式。具体来说,Istio 是一个开源服务网格平台,它确保微服务在处理故障时以指定的方式相互连接。 更新内容 修复了监视资源被删除后,操作员无法重新创建的问题 修复了Istio因消息崩溃的问题: proto.Message is *client.QuotaSpecBinding, not *client.QuotaSpecBinding 添加了对 k8s.v1.cni.cncf.io/networks 注释的支持 更新了 SidecarInjectionSpec 以从 .Values.global 读取 imagePullSecret 更新了水平分割以跳过解析主机名的网关 修复了 istioctl experimental metrics ,仅将错误响应代码标记为 erros 更新了 istioctl analyze 以对输出格式进行排序 更新了网关以使用 proxyMetadata 更新了 Prometheus Sidecar 以使用 proxyMetadata 启用 gateway.runAsRoot 时从 PodSecurityContext 中删除了无效的配置 升级更新 从已有版本升级,运行: istioctl

PHP使用聚合图床的上传接口PHP版和html版

拈花ヽ惹草 提交于 2020-07-27 22:58:58
折腾了好久 官方连个像样的例子都没给 折腾折腾 <? php function http_request($url,$data = null ,$headers= array()) { $curl = curl_init(); if (count($headers) >= 1 ){ curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); } curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (! empty($data)){ curl_setopt($curl, CURLOPT_POST, 1 ); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1 ); $output = curl_exec($curl); curl_close($curl); return $output; } if ($_POST) { $data = array( ' file ' =>curl