初始dnsdist的负载算法

DNSDist 支持多种负载均衡算法,包括以下常见算法: Round-robin(轮询):DNSDist 按照一定的顺序依次将 DNS 查询请求发送给后端 DNS 服务器,直到所有服务器都被轮询一遍。 Random(随机):DNSDist 随机选择一个后端 DNS 服务器,并将 DNS 查询请求发送给它。 LeastOutstanding(最小连接):DNSDist 根据每个服务器的当前连接数,选择连接数最少的服务器,并将 DNS 查询请求发送给它。 Source IP Hashing(源 IP 哈希):DNSDist 使用查询请求的源 IP 地址计算哈希值,并将该请求发送到哈希值对应的后端服务器上。对于同一个源 IP 地址的查询请求,DNSDist 会将它们发送到同一个后端服务器上。 要使用这些负载均衡算法,您需要在 DNSDist 的配置文件中为每个后端 DNS 服务器设置相应的负载均衡算法。例如,以下配置示例使用 Round-robin 算法将 DNS 查询请求分发给三个后端 DNS 服务器:

二月 27, 2023 · 1 分钟 · Ken

tronlink-归集系统

前言 首先要了解下tronlink的交易机制,进行trc20如usdt和usdc转账的时候,如果没有冻结能量将会损耗一定的trx,该系统的目的就是减少这部分损耗的trx 相关笔记 tronlink-扫块系统,有需要的可先前往了解 目标 搭建冻结能量系统,例如你有10000trx后,在自己的交易系统里可以根据需求为自己的子钱包进行冻结能量,减少trx的支出 前置条件 python 正式内容 下面会细分说明下每个def的方法用途,以及总的冻结流程如何处理 获取当次可冻结的钱包数 每完成一次流程,需要执行(解冻->质押)*n->投票,计算大概需要的能量判断该次可操作多少个,基础操作目前发现大约300带宽一次 def get_max_unfreeze_count(tronapi): once = 300 getaccountnet = tronapi.getaccountresource() freeNetUsed = getaccountnet['freeNetUsed'] if 'freeNetUsed' in getaccountnet else 0 freeNetLimit = getaccountnet['freeNetLimit'] if 'freeNetLimit' in getaccountnet else 0 NetUsed = getaccountnet['NetUsed'] if 'NetUsed' in getaccountnet else 0 NetLimit = getaccountnet['NetLimit'] if 'NetLimit' in getaccountnet else 0 bandwidth = NetLimit + freeNetLimit - NetUsed - freeNetUsed # 质押->投票 固定操作两次 counts=math.floor((bandwidth-once) / (2 * once)) print("[%s]:当前带宽:%s 可操作:%s个地址" % (datetime....

八月 20, 2022 · 3 分钟 · Ken

从0到1 记录搭建Hugo个人博客-04 增加评论功能

前言 搭建个人博客或者其他网站站点的时候,只有静态页面显得比较冷清,想了解自己的文章能不能帮到更多有相同疑惑的人,或者为自己的网站增添功能 目标 扩展自己的网站支持评论功能 前置条件 有github的账号 正式内容 感谢提供这个评论功能的giscus,在不用维护评论功能以及数据库的情况下,这是款十分便利的评论系统 创建github仓库 首先需要创建一个github的仓库,用于保存评论的留言,并且需要一些小小的配置,参考官网 选择 giscus 连接到的仓库。请确保: 此仓库是公开的,否则访客将无法查看 discussion。 giscus app 已安装否则访客将无法评论和回应。 指导入口 Discussions功能已在你的仓库中启用。指导 选择配置 创建完仓库后,在giscus的配置栏中选择自己需要的配置 如本文的配置为 <script src="https://giscus.app/client.js" data-repo="suguer/giscus.github.io" data-repo-id="R_kgDOH08FpA" data-category="Announcements" data-category-id="DIC_kwDOH08FpM4CQ2jj" data-mapping="title" data-strict="0" data-reactions-enabled="1" data-emit-metadata="0" data-input-position="top" data-theme="preferred_color_scheme" data-lang="zh-CN" data-loading="lazy" crossorigin="anonymous" async> </script> 嵌入js代码 hugo的详情文章路径一般在主题下的layouts/_default/single.html,建议不要在主题下theme直接修改文件,避免后续升级覆盖没了,可在根目录下相同创建出layouts/_default/single.html,接着在代码最后粘贴giscus的那段js代码即可

八月 18, 2022 · 1 分钟 · Ken

Gitblit-如何实现自动编译发布

前言 在外网正式环境中如果配置不足,编译前端项目可能导致服务器的卡死甚至死机,因此可采取内网服务器上编译再自动发布 目标 内网编译前端项目,分发到另一个git项目并自动提交发布 前置条件 gitblit 正式内容 1. 创建 append-auto-compile.groovy import com.gitblit.GitBlit import com.gitblit.Keys import com.gitblit.models.RepositoryModel import com.gitblit.models.TeamModel import com.gitblit.models.UserModel import com.gitblit.utils.JGitUtils import com.gitblit.utils.StringUtils import java.text.SimpleDateFormat import org.eclipse.jgit.api.CloneCommand import org.eclipse.jgit.api.PullCommand import org.eclipse.jgit.api.Git import org.eclipse.jgit.lib.Repository import org.eclipse.jgit.lib.Config import org.eclipse.jgit.revwalk.RevCommit import org.eclipse.jgit.transport.ReceiveCommand import org.eclipse.jgit.transport.ReceiveCommand.Result import org.eclipse.jgit.util.FileUtils import org.slf4j.Logger logger.info("append-auto-compile hook triggered by ${user.username} for ${repository.name} l") def rootFolder = '/home/git/' def bare = false def cloneAllBranches = true def cloneBranch = 'refs/heads/master' def includeSubmodules = true def repoName = repository....

八月 16, 2022 · 1 分钟 · Ken

Github-

前言 目前github已经不允许使用账号密码上传代码,因此记录如何通过设置ssh来上传 目标 前置条件 能运行ssh-keygen 正式内容 ssh-keygen -t rsa -C “email” 在 C:\Users\用户.ssh下 |- id_rsa (上传的时候携带该数据) |- id_rsa.pub (可在项目或者个人中心设置中添加该数据) 如果想要免密码上传代码 可输入 http://账号:密码@url.gt

八月 16, 2022 · 1 分钟 · Ken

tronlink-扫块系统

前言 对于某些网站平台如果想支持收取波场区块链,但是又不清楚完整的流程应该如何部署的话,这里可以提供一套较为完整的方案,实现如商城下支持对客户的在线支付, 目标 实现客户在线支付,收取波场链的usdt或usdc,并且自动支付和激活订单,最后能归集到一个账户上自由使用 前置条件 在波场链有足够的trx,数量的多少取决于你对于归集的效率的需求,如果需要归集的周期越短,效率越快,则需要的trx越多 1个总钱包,其中会扩展的功能有,分发冻结能量,收款,激活钱包,也可以看业务需要拆开成3个钱包 开发环境: python mysql 正式内容 所有的接口以及交互均来自 波场链官网文档 ,如果对于文档不太熟的同学请先阅读了解下波场链的交易流程 主要数据结构 节点数据 block_chain_block 数据类型 类型 描述 id bigint 区块节点 total int 总交易数 active int 已激活交易数 created_at timestamp 创建时间 updated_at timestamp 更新时间 started_at timestamp 开始执行时间 ended_at timestamp 结束执行时间 block_at timestamp 节点时间 error timestamp 节点错误信息 钱包数据 block_chain_wallet 数据类型 类型 描述 id int 自增id address varchar(255) 地址 private_key varchar(1024) 地址密钥(建议保存到数据库时加密) user_id int 客户用户ID created_at timestamp 创建时间 updated_at timestamp 更新时间 deposit decimal(30,6) 余额 status varchar(16) 状态 扫块系统 想要获取到链上所有的交易信息,主要有两种方式,第一自建超级节点服务器,这样就可以频繁获取数据而不受限制,但是对于一般的网站平台来说,搭建一台波场链节点服务器浪费了资金,因此这里采用第二种方式,通过官网提供的接口进行查询同步,需注意本文涉及用到的接口均是固块化API...

八月 16, 2022 · 3 分钟 · Ken

从0到1 记录搭建Hugo个人博客-03 使用Algolia搜索

Hugo添加Algolia搜索支持 本文主要介绍如何在Hugo上增加Algolia的搜索支持,Alogolia官网 添加Algolia搜索支持主要以下步骤: ###1. 进入 Algolia 官网注册创建环境 个人使用选择免费版即可,可以满足日常需求了 地区若是国内则建议选择Hong Kong ,延迟较小效果比较好 最后提交即可 ###2. 创建Application和Index 名称可自定义,我为了方便区别,创建都习惯用直接的域名作为名称 https://www.algolia.com/account/api-keys/all?applicationId=你的applicationId ###3. Hugo配置Algolia的环境 修改 config.toml 文件声明需要生成Algolia索引文件以及相关信息 [outputs] home = [“HTML”, “RSS”, “Algolia”] …中间省略 [outputFormats.Algolia] baseName = “algolia” isPlainText = true mediaType = “application/json” notAlternative = true [params.algolia] appId = “你的Application ID” indexName = “你的索引名字” searchOnlyKey = “你的Search-Only API Key” 注意outputs下面home的末尾有"Algolia",漏了就不会生成了。 appId, indexName, searchOnlyKey 填写刚才记录的Algolia信息。 根目录下 layouts/_default (没有就新建) 文件夹中新建 list.algolia.json 文件,内容如下: {{/* 生成Algolia搜索索引文件 /}} {{- $.Scratch.Add “index” slice -}}...

八月 15, 2022 · 2 分钟 · Ken

php-分享自有系统接入OCR图片识别

前言 最近比较了几家大的云平台产品,发现百度云的ocr识别,只要通过了企业认证的话,可以每天免费获取一定额度的使用,因此在这里分享下如何使用ocr识别api 目标 可用在实现内部员工系统的快速身份认证,或者部分客户的营业执照和个人认证,注意仅限小量内部使用,如需用在正式环境中建议购买足够的流量包 前置条件 开发环境 PHP 百度云能企业认证 正式内容 百度接口的认证方式 百度的鉴权方式是以Token的方式,具体教程可查看官网API,这里不重复说明了 function getToken 封装下获取Token的方式,避免重复请求次数过于频繁 public function getToken() { $filename = "/data/baidu_access_token.{$this->access_key}.json"; if (file_exists($filename)) { $content = file_get_contents($filename); if ($content) { $json = json_decode($content, 1); if (strtotime($json['expires_in']) > time()) { return $json['access_token']; } } } $resp = json_decode($this->client->request("POST", "https://aip.baidubce.com/oauth/2.0/token", [ 'form_params' => [ 'grant_type' => 'client_credentials', 'client_id' => $this->access_key, 'client_secret' => $this->secret_key, ] ])->getBody()->getContents(), 1); $data = [ 'access_token' => $resp['access_token'], 'expires_in' => date("Y-m-d H:i:s", strtotime("+29 day")), ]; file_put_contents($filename, json_encode($data, JSON_UNESCAPED_UNICODE)); return $resp['access_token']; } private function request($action, $p) { $option = [ 'query' => [ 'access_token' => $this->getToken(), ], ]; if ($this->target == 'face') { $option['json'] = $p; } else { $option['form_params'] = $p; } $resp = $this->client->request("POST", "{$api_url}/{$action}", $option) ->getBody() ->getContents(); return json_decode($resp, true); } 身份证识别 function OcrIdcard 先展示官方文档,文档中可看出ocr的识别支持两种提交方式,图片的base64或者图片url,因此这里稍微封装一下...

八月 15, 2022 · 3 分钟 · Ken

Php邮件收取imap

前言 招商银行的收款通知可以添加邮件推送,因此利用php-imap收取邮件,可达到自动化确款的目的 目标 前置条件 composer require php-imap/php-imap 正式内容 php-imap 的使用 $mailbox = new Mailbox( '{SMTP服务器:SMTP端口号/imap}INBOX', // IMAP server and mailbox folder '邮箱账号', // Username for the before configured mailbox '邮箱密码', // Password for the before configured username null, // Directory, where attachments will be saved (optional) 'UTF-8' // Server encoding (optional) ); try { $mailsIds = $mailbox->searchMailbox('ALL'); } catch (PhpImap\Exceptions\ConnectionException $ex) { echo "IMAP connection failed: " . $ex; die(); } rsort($mailsIds); foreach ($mailsIds as $key => $item) { //循环遍历 $mail = $mailbox->getMail($item); $fromAddress = $mail->fromAddress; $content = $mail->textHtml; if(!...

八月 12, 2022 · 1 分钟 · Ken

从0到1 用宝塔集成虚拟主机提供商

前言 对比一般市场上的虚拟主机,宝塔都能兼容支持绝大多数的功能,并且宝塔有个比较大的特点为,页面上的接口均可以通过api请求,因此产生了这个想法定制出宝塔基础的虚拟主机 目标 前置条件 window server的主机 宝塔需安装在数据盘D盘上 正式内容 定义的配置文件 /data/vhost/baota.conf.json [ { "fchrServer":"flage", "host":"127.0.0.1", "key":"bt_api_key", "port":"8888", "mysql":"mysql_password", "sqlserver":"mssql_password", "region_id":"hk", "zone_id":"hk-02", "network":"bgp" } ] 封装好的交互php函数方法 class VhostBaotaClient implements VhostClientInterface { use ApiConfigTrait; use ApiLoggerTrait; private $client; private $key = ""; public $host = ""; private $port = "8888"; private $mssql_password = ""; /** * @var array 远端主机的状态转换 */ public $RemoteStatus = [ '1' => 'Running', '0' => 'Stopped', ]; public $IISRemoteStatus = [ 'Started' => 'Running', 'Stopped' => 'Stopped', ]; public static function getConfig() { return json_decode(file_get_contents('/data/vhost/baota....

八月 12, 2022 · 15 分钟 · Ken