Wednesday, May 19, 2021

V2EX - 技术

V2EX - 技术


如何配置近乎完美的开发环境?

Posted: 19 May 2021 05:11 AM PDT

这两天被 npm install 各种报错搞疯了, 虽然后来通过设置 npm 源地址和 git 代理搞定了, 但这中间为了解决网络问题而非开发问题而浪费了不少时间.

同时也想起了之前自学后端时安装 sqlite 的各种碰壁...

V 友们, 请问目前最接近完美的开发环境是什么样的? 又如何配置呢?

开发环境对于完美的定义: 配置后一劳永逸, 其余时间专注于码代码.

现在(2021 年)各种 app 在安卓根目录乱写的问题有解了吗?

Posted: 19 May 2021 05:01 AM PDT

V 站写字最好看的程序员........

Posted: 19 May 2021 04:59 AM PDT

写代码会让你觉得自己能改变世界,而写字会让你意识到你只能改变自己。

点击查看部分书法习作,欢迎关注

公众号:书法迷

当爱已成往事

devops 工作来哟-成都极米科技

Posted: 19 May 2021 04:54 AM PDT

欢迎成都的小伙伴,来极米 devops,内推哦 ,简历砸我

废话不多先说待遇:15-25K·15 薪,还过得去的

1.开发与运维 Devops CI/CD 工具链 ,引入 CNC 的云原生技术栈如 Jenkinsx,gitlab,kubernetes, tekton,docker harbor,artifactory,nexus,prometheus
2.优化与落地最新构建高阶框架如 makefile,cmake,scons,mavn,gradle,go module,bazel.精通 gcc,gdb 编译器原理,编译选项,安全编译选项。
3.熟悉分布式缓存分布式构建系统,ccache,diskcc.icescream,ea,ib 等。能优化源码,构建加速方案如并行缓存,增量
4.构建依赖深度分析系统开发,自动发现与解析隐藏依赖,冗余依赖,深度依赖,公共有文件,循环依赖。
5.构建基础设施自动化运维,监控,熟悉业界开源主流生态。
任职要求:
1.高级构建工程师,解决构建效率问题,构建依赖分析。
2.掌握 c/c++,Java, python,go, shell 等编程语言。
3.熟练掌握 jenkins pipeline as code 开发,openstack,docker, k8s,Ansible 等自动化运维工具,容器编排。灰度发布等机制
4.熟悉 git 配置管理自助运维,filebeat,ELK, kafka,Hadoop,prometheus 等监控工具配置
5.熟悉 CI CD 各阶段框架如构建框架,测试框架,代码检测框架,线上部署
学历要求 :本科学历

疑问解答:
没有那么严重的加班

一个小问题,阿里云、AWS 的 api 文档的参数名为什么是大写开头

Posted: 19 May 2021 04:54 AM PDT

golang 限流器,控制并发,线程池

Posted: 19 May 2021 04:50 AM PDT

gowp

golang worker pool ,线程池 , 工作池

  • 并发限制 goroutine 池。
  • 限制任务执行的并发性,而不是排队的任务数。
  • 无论排队多少任务,都不会阻止提交任务。
  • 通过队列支持
  • 限流器
  • golang 工作池公共库

支持最大任务数, 放到工作池里面 并等待全部完成

package main  import ( 	"fmt" 	"time"  	"github.com/xxjwxc/gowp/workerpool" )  func main() { 	wp := workerpool.New(10)             //设置最大线程数 	for i := 0; i < 20; i++ { //开启 20 个请求 		ii := i 		wp.Do(func() error { 			for j := 0; j < 10; j++ { //每次打印 0-10 的值 				fmt.Println(fmt.Sprintf("%v->\t%v", ii, j)) 				time.Sleep(1 * time.Second) 			} 			//time.Sleep(1 * time.Second) 			return nil 		}) 	}  	wp.Wait() 	fmt.Println("down") } 

限流器(cache)

package main  import ( 	"fmt" 	"sync" 	"time"  	"github.com/xxjwxc/gowp/limiter" )  func main() { 	limiter := limiter.NewLimiter(limiter.WithLimit(10), limiter.WithNamespace("test"), limiter.WithTsTimeout(true) /*, limiter.WithRedis(res)*/) 	var wg sync.WaitGroup 	for i := 0; i < 20; i++ { 		wg.Add(1) 		go func() { 			defer wg.Done() 			token, _ := limiter.Acquire(10) // 获取一个 			fmt.Println(token)  			time.Sleep(1 * time.Second) 			limiter.Release(token) // 回退 		}() 	} 	wg.Wait() 	fmt.Println("down") } 

限流器(redis)

package main  import ( 	"fmt" 	"sync" 	"time"  	"github.com/xxjwxc/gowp/limiter" 	"github.com/xxjwxc/public/myredis" )  func main() { 	conf := myredis.InitRedis(myredis.WithAddr("127.0.0.1:6379"), myredis.WithPwd("123456"), myredis.WithGroupName("test")) 	res, err := myredis.NewRedis(conf) 	if err != nil { 		fmt.Println(err) 		return 	}  	limiter := limiter.NewLimiter(limiter.WithRedis(res), limiter.WithLimit(10), limiter.WithNamespace("test") /*, limiter.WithRedis(res)*/) 	var wg sync.WaitGroup 	for i := 0; i < 20; i++ { 		wg.Add(1) 		go func() { 			defer wg.Done() 			token, _ := limiter.Acquire(10) // 获取一个 			fmt.Println(token)  			time.Sleep(1 * time.Second) 			limiter.Release(token) // 回退 		}() 	} 	wg.Wait() 	fmt.Println("down") }  

代码地址 gowp

spring mongdb 查询问题

Posted: 19 May 2021 04:40 AM PDT

我在使用 spring-data-mongodb 在 spring boot 中处理数据库

数据库内容如下:

{  "_id" : "b8261207-3f95-40ca-bd05-e06ad451dff8", "updateDate" : ISODate("2021-05-18T09:17:28.409Z"),  "isDelete" : false,  "name" : "test",  "receivedDate" : ISODate("2021-05-15T09:38:52Z"),  "deviceId" : "55118b35-43d3-4700-b8be-41daefb7f502",  "createDate" : ISODate("2021-05-18T09:17:28.409Z")  } {  "_id" : "b8261207-3f95-40ca-bd05-e06ad451dff8", "updateDate" : ISODate("2021-05-18T09:17:28.409Z"),  "isDelete" : false,  "test" : "test",  "createDate" : ISODate("2021-05-18T09:17:28.409Z")  } 

然后我写的 repository 查询代码如下:

    public List<HashMap> findAll() {         return mongoTemplate.findAll(HashMap.class, Constant.collectionName);     } 

我有两个问题想问下:

  • 因为数据库储存的 json 格式和内容是不固定的,所以我没有使用 entity 来处理实体类,而是使用 HashMap<String, Object>来处理的,目前在查询的时候使用 HashMap 进行查询结果储存

对于这个方案,大家有不同的建议嘛?使用 HashMap 有个问题是转不了 HashMap<String, Object>,这个转换只能遍历转换?

我也尝试使用 DBObject 替代 HashMap 进行使用,这两个那个比较好呢?或者有没有其他的方案

  • 第二个问题是无论我使用到的是 HashMap 或者 DBObject,查询出来的结果都是下面的
[     {         "updateDate": 1621329448409,         "isDelete": false,         "name": "test",         "_id": "b8261207-3f95-40ca-bd05-e06ad451dff8",         "receivedDate": 1621071532000,         "deviceId": "55118b35-43d3-4700-b8be-41daefb7f502",         "createDate": 1621329448409     } ] 

这个时间在 mongodb 中是 ISODate,但是查询出来由于没有使用具体的类型导致了没有自动转换格式,我希望查询出来的格式是"yyyy-MM-dd HH:mm:ss"的

这个可以有什么办法自动实现嘛?使用遍历手动转感觉不太友好

  • 资料

Storing a JSON schema in mongodb with spring

如何在 Spring Data MongoDB 中保存和查询动态字段

spring security 通过 oauth2 接入 cas

Posted: 19 May 2021 04:24 AM PDT

各位彦祖们,场景如题,问题是 spring security 获得浏览器的 code 回传到 cas 获取 token 时,发送的请求中 code 是放在 body 里的,但是 cas 的 api 要求 code 放在 uri 里,彦祖们碰到过这种问题吗,都是怎么解决的?

今天打开电脑,发现 win10 推送了 21H1

Posted: 19 May 2021 04:22 AM PDT

上班开电脑例行点一下检查更新,猛然看到 21H1,现在还在犹豫要不要立刻更新

Linux 桌面环境到底如何选择?为啥经常看到有人说 kde 比 gnome 好用?这个好用体现在哪?流畅性?软件兼容性?还是自定义性? kde 有哪些优势呢?有很多人说 GNOME3 很拉跨,到底拉在哪里地方?作为一个桌面什么最重要呢?

Posted: 19 May 2021 04:21 AM PDT

GNOME3 到底用了什么技术所以就拉跨了?

我只是简单的用过几天 ked 和 gnome 感觉不出太多的差异

另外我觉得桌面环境有一点非常重要 就是颜色和字体渲染

引用某乎大佬的一句话"gnome 废物, 这么多系统预装份额才这么点, 足见有多烂, 就如同 Windows 预装 IE 却被 chrome 远远甩开完全是因为太烂一样." 阿这 到底烂在哪里???当然 IE 的烂是大家公认的 所以它现在死了

如果你问我 Windows 烂吗? emmm 还好吧 有点烂 但是作为一个全世界份额最多的桌面系统 高分屏 字体渲染的如此辣鸡,还有颜色管理如此辣鸡的桌面还是挺烂的,这是我比较诟病的一点,蓝屏什么的,还有 Windows 认为它的更新永远比用户更重要,所以它无时无刻不在更新,每次我装系统第一件事就是关闭自动更新

刚入手一周的腾讯云香港轻量服务器出了点问题

Posted: 19 May 2021 04:20 AM PDT

一周前购入了良心云的香港轻量服务器,访问速度确实比福报云快很多。trace route 试了下,在上海是直连的。

然鹅今天早上发现国内 ping 不通也无法访问。提交工单后,说是出口线路问题就让我重装换 ip 了。

现在正在备份数据重装中。。。。

Snipaste_2021-05-19_10-25-27.png

Snipaste_2021-05-19_10-25-36.png

亲儿子卡了什么 BUG 吗?

Posted: 19 May 2021 04:08 AM PDT

pixel 4xl,今天重启了之后,用的图案解锁,死活解不开锁屏了,提示图案错误。排除忘记图案,因为戴口罩的话面部解锁用不了,每天都用图案解锁几次的,而且图案设置得也很简单。排除女朋友偷偷修改,因为没有。面部解锁还是正确的,但是重启了之后一定要用图案解锁一次。。要不是有备机,估计今天班都不能上了。有没有老哥知道啥情况,除了重刷有没有解决办法啊 /(ㄒoㄒ)/~~

Python 环境管理用那一套比较好: pyenv, pipenv 还是 virtualen

Posted: 19 May 2021 04:01 AM PDT

我现在有这样一个场景,内网不能连接互联网,需要部署一套基于 selenium 的自动化系统,不能用 pip 从网上下包,也不允许用 docker 做镜像导入,只能用安装包一个个安装部署,最多自己写写脚本自动安装。

我可以在外网弄一个虚拟机,安装一模一样的操作系统,试验部署直至整个系统稳定运行,然后把所有依赖打包至内网,然后手动或者用脚本重复整个过程。

这个部署过程还得分别在 Debian 9 和 Windows 7 上面部署两套,我准备弄 Debian 9 和 Win 7 两套虚拟机分别做,都只能单机条件下,而且不能自己内网弄个服务器建一个本地源存放所有包,有什么比较好的解决方案。最好是能自动化脚本,机器数量还比较多。

目前看了一下,本地包管理的话使用 pip 和 pyinstaller,Python 环境管理有 pyenv,pipenv 还是 virtualenv,已知的问题是 pyenv 必须使用 pyenv 管理的 python 版本,其他还有什么坑?麻烦各位支个招,有踩坑过的也来分享一下。

请大佬帮忙指点一下 uint8 的疑问

Posted: 19 May 2021 03:53 AM PDT

go 中说 byte 是 uint8 的别名,长度为 1 个字节,用于表示 ASCII 字符

那 unit8 的取值范围是 0-255 ascii 只有 128 个字符

例如下面的代码

var b1 byte = 129 var b2 byte = 65 var b3 byte = 253  fmt.Println("b1", string(b1)) fmt.Println("b2", string(b2)) fmt.Println("b3", string(b3)) 

输出

b1  b2 A b3 ý  

b1 转字符串之后是空的 b3 超过 128 了 打印出来字符串ý ascii 码表里又没有这个ý

我学不会了呢啊😂

带着 orm 封装的疑问,我又来了~!

Posted: 19 May 2021 03:25 AM PDT

事情是这样的,在有了 orm 之后,在封装一层数据访问层,我觉得是没有大问题的。但是问题是怎么进行封装比较合适呢? 下面是两个 case (伪代码):
case1:

// 新增用户昵称 function addName(user_id, name){     // 获取数据库链接     db = _get_db()     if (not db){     	return error     }      add_time = time()      insert_row = {         user_id = user_id,         name = name,         status = this.status_using,         add_time = add_time,         updated_time = add_time,     }     insert_id, err = db.add(table, insert_row)     if (err) {         LOG("添加姓名失败" ,insert_row ,insert_id ,err)         return error     }      return true }  // service 层调用 res = xxx.addName(12, '拜拜你条尾')  code ...  

case2:

function db_option(handlearr){     is_ok = false     if (len(handlearr) <= 0) {         return is_ok     }      db = _get_db()     if (not db){     	return is_ok     }      for (index, option in handlearr) {         is_ok = true         if (option.cmd== '__delete') {             res = db.delete(option.table_name, option.data)             if (res <= 0) {                 LOG("delete data err where:",json_encode(option.data))                 is_ok = false             }         }         if (option.cmd== '__insert'){             res = db.add(option.table_name, option.data)             if (not res) {                 LOG("insert data failed:",json_encode(option.data))                 is_ok = false             }         }     }     return is_ok }  // service 层调用 handlearr = [     {cmd = '__insert',table_name = 't_user', data = userinfo},       {cmd = '__delete',table_name = 't_device', data = {id = deviceinfo.id}} ]  res = db_option(handlearr)  code ... 

1.想知道怎样的封装才是比较合适的?个人认为第一种就够了,第二种的话好像慢慢会封装成另一个 orm 的感觉,而且隐藏的细节更多了.... 2.dao 层对 orm 再封装的话,怎么样才比较符合认知?

求各位赐教!

喂!三点几嚟!做做撚啊做!饮杯水先!

Posted: 19 May 2021 02:53 AM PDT

求推荐文档工具

Posted: 19 May 2021 02:36 AM PDT

需求:

  1. 用于维护文档;类比:gitbook,可以托管在 gitee 或者 github
  2. 用于维护开放内容( WIKI )

不同 Region 域间的虚机状态同步

Posted: 19 May 2021 01:24 AM PDT

只知道阿里云不支持不同地域之间迁移,那么假如我在北京和上海都部署一套的话,如何保证两个地区的服务状态一致呢,不懂,问问大家

帮忙看看这个 shell 脚本,搞不定。。

Posted: 19 May 2021 12:29 AM PDT

#!/bin/bash OLD_INFO=hostlist

for IP in $(awk '/^[^#]/{print $1}' $OLD_INFO); do

USER=$(awk -v I=$IP 'I==$1{print $2}' $OLD_INFO)  PASS=$(awk -v I=$IP 'I==$1{print $3}' $OLD_INFO)  PORT=$(awk -v I=$IP 'I==$1{print $4}' $OLD_INFO)  NEW_PASS=$(awk -v I=$IP 'I==$1{print $5}' $OLD_INFO)   expect -c"  spawn ssh -p$PORT root@$IP  set timeout 15  expect {      \"(yes/no)\" {send \"yes\r\";exp_continue}          \"password:\" {send \"$PASS\r\";exp_continue}          \"# \" {send \"echo \'$NEW_PASS\'|passwd --stdin $USER\r exit\r\";exp_continue}      }" 

done

当 hostlist 文件里的多行记录出现同一个 IP 时。。。脚本就不行了,比如内容如下

192.168.128.130 test 123456 22 abc*123

192.168.128.131 a 123456 22 abc*123

我把脚本改成 for line in hostlist,按行读取,再加个 IP 参数,又是另一种错误了。。。

workerman 在电脑端好使,在手机浏览器上不好使,有没有大神遇到过,求解答

Posted: 19 May 2021 12:05 AM PDT

用的 workerman-chat 的那个包,js 什么的都是直接复制过去的,在电脑 chrome 浏览器上好使, 但是在微信浏览器不好使, 我要开发个直播然后带聊天的那种,已经开发完了, 才发现手机浏览器上不好使 ,因为是公众号网页, 我在微信开发者工具上也试了, 也好使, 只有手机浏览器不好使

云服务器偶尔 system CPU 飙升,持续十来秒又下降,而且是高峰出现比较频繁。

Posted: 18 May 2021 11:42 PM PDT

一样的访问量,没有改任何的配置,5 月 11 日开始云服务器 CPU 开始异常,表现为 system 进程占用率不定时出现过高的占用率,此前 system 进程 CPU 占用近乎为 0 。
查了一下占用的问题,发现这个,但是看不懂。
11.12 ntoskrnl.exe|KeInitializeThreadedDpc+0x18a8
3.01 ntoskrnl.exe|KdPollBreakIn+0x7f70
2.62 ntoskrnl.exe|KdPollBreakIn+0x7f70
2.48 ntoskrnl.exe|KdPollBreakIn+0x7f70
2.48 ntoskrnl.exe|KdPollBreakIn+0x7f70
.
.
.

1 、怀疑系统有问题,用户访问少的时候打算重装一下
2 、怀疑硬件冲突,按道理不会。发工单问有没冲突,答复:没有。
3 、怀疑云厂商超售了..

问题已经出现 7 天了,近七天的平均 CPU 居然到 30%+
而早前的同样访问量的平均 CPU 只有 8%+

问一个小白的问题,为啥 nfs 挂载硬盘 不需要帐号密码?不需要身份认证?如果这样的话 不是任何人通过 ip 连接你的硬盘吗?安全性如何保证?我看了一些教程都是没有帐号密码的,让我一度以为教程写错了

Posted: 18 May 2021 11:36 PM PDT

如题

如何保证数据安全性呢?

并且如果在 turenas 里面不给所有人可以访问的权限 好像 nfs 也挂载不上去

那么如何保证安全性又能愉快的访问文件呢?

另外相比较 smb 而言 它好像也没有 gid 和 uid 的说法,这种是好呢?还是不好呢?

大家好,请问 反向代理 后,真实的服务器地址有必要 ssl 吗?

Posted: 18 May 2021 09:24 PM PDT

域名解析在 A 服务器,并且配置了 ssl,所有访问都是 https,

然后 nginx 配置了反向代理到 B 服务器,B 是实际的服务器,存储了 前台 dist 文件夹、server.bundle.js 、数据库,

假设 B 服务器上的文件需要保证安全(并配置了其他安全策略,如禁止 root 远程 ssh 、隐藏真实服务器 ip 和版本号),

那么 有必要给 B 服务器单独配置域名 以及 ssl 吗?

我主要的疑惑是:B 单独配置了域名以及 ssl 和 直接是 ip 的情况下,安全效果是一样的还是有差异?

谢谢。

使用 JavaScript 编写高性能 JavaScript 引擎

Posted: 18 May 2021 08:28 PM PDT

logo

使用 JavaScript 编写的更快更安全的 JavaScript 引擎,其可以用来:

  1. 执行沙盒(类似于 Figma 的插件沙盒,但是更易于使用);
  2. 小游戏 /小程序的动态执行;
  3. 通过将 JavaScript 编译为 opcode 进行代码保护;

其已经覆盖了约 95%的 test262 es5-tests cases,其可以很安全可靠的用于你的生产之中。

👉 点击访问 Github 进行了解 👈

请教下如何安装 github 下载的依赖呢?

Posted: 18 May 2021 07:47 PM PDT

github 地址: https://github.com/tmbo/questionary

  • 看安装说明可以 pip 安装,但是无奈安装一直报错。
  • 遂下载了文件,但是找不到 setup.py ,应该怎么安装这个依赖呢?
  • 包的蓝奏云地址: https://wwr.lanzoui.com/iTNkyp9cwve 请教一下

Arch 发行版入门短视频集

Posted: 18 May 2021 07:05 PM PDT

我的从 WSL 起步的 Linux 系统应用短视频集现在开始介绍 Arch 发行版了,欢迎关注~ 希望能帮到新手……

崩溃了, nfs 挂载半天挂载不上去,各种报错,不是 mount.nfs mount system call failed 就是其他奇怪的问题。教程都看了,版本也切换了就是不行,我看教程上的挂载参数比 smb 还少,救救孩子吧

Posted: 18 May 2021 07:05 PM PDT

各位有没有 2021 年适合的教程 我的环境是这样的 truenas 做服务端 开启了 nfs 也分配了权限,然后 ubuntu 是客户端来连接 truenas

实际试用 smb 可以正常使用挂载,

但是 nfs 死活不行!!!救救孩子 我看了这些教程: https://help.ubuntu.com/community/SettingUpNFSHowTo

https://www.answertopia.com/ubuntu/using-nfs-to-share-ubuntu-files-with-remote-systems/

https://linuxhint.com/ubuntu_20-04_-mounting_nfs/

https://blog.csdn.net/HandsomeHong/article/details/81010457

mount -t nfs 10.10.0.10:/backups /var/backups

求教怎么 slolo mining 狗狗币呢?

Posted: 18 May 2021 06:58 PM PDT

是不是现在 solo mining 都已经不可能了呢

Android Studio Bumblebee Canary 1 available

Posted: 18 May 2021 06:03 PM PDT

同时 Android Studio Arctic Fox Beta 1 available
快来尝鲜吧~

建了关于 Google Play 上 app 开发和上架问题探讨的微信群

Posted: 18 May 2021 02:11 PM PDT

如果你是正在从事 Google Play 上 App 的开发和上架,如果你有任何 Google Play 上架和开发方面的问题,或者经验想跟大家分享。欢迎加入这个群。

https://i.imgur.com/Mozs8uJ

PS: 建立这个群的目的不是为了吹水或者瞎扯淡,是为了 Google Play 开发和上架过程中遇到各种问题,大家一起去探讨解决方案。我身边做这 Google Play 的小伙伴不多,想在 V 站汇集一波 GP 开发者,遇到问题的时候,可以一起探讨。

买了个手机,连个电话都打不了,第一次活见鬼

Posted: 18 May 2021 01:15 PM PDT

事情是这样的,新买了个三星 S20 手机,插了个电信卡,手机提示要求开通 Volte 服务,不然就无法正常语音通话流量,无奈只能把电信卡放到旧的水果机上,打电话给电信客服,要求开通 Volte 服务,客服一看说你这卡没有任何信息,无法开通,这里提一句,因为我买的是京东通信卡,正常语音流量短信功能都是可以的,后来又联系京东,客服直接说不支持开通 Volte 高清通话,这就尴尬了,电信卡新手机用不了,新手机也不支持关闭,悔不当初啊。

今天遇到的 node.js 的笔试题,我在解这道题的时候,有个问题我不太明白,感觉自己傻 X 了

Posted: 18 May 2021 10:35 AM PDT

function checkLegalStr(str=''){   return (str !== '' && str !== '-' && str !== 'N/A') }  function handleObject(obj={}){   for(let key in obj){     if(typeof obj[key] === 'object'){       handleObject(obj[key]);     }else if(Array.isArray(obj[key])){       obj[key] = obj[key].filter(item=>{return checkLegalStr(item);});     }else{       if(!checkLegalStr(obj[key])){         delete obj[key];       }     }   } }  const obj = {   name: { first: 'Robert', middle: '', last: 'Smith' },   age: 25,   DOB: '-',   hobbies: [ 'running', 'coding', '-' ],   education: { highschool: 'N/A', college: 'Yale' } };  console.log(obj); handleObject(obj); console.log(obj); 

为啥这个结果 obj.hobbies 会有一个空值<1 empty item>

以下是前后输出

{   name: { first: 'Robert', middle: '', last: 'Smith' },   age: 25,   DOB: '-',   hobbies: [ 'running', 'coding', '-' ],   education: { highschool: 'N/A', college: 'Yale' } } {   name: { first: 'Robert', last: 'Smith' },   age: 25,   hobbies: [ 'running', 'coding', <1 empty item> ],   education: { college: 'Yale' } }  

实在是奇怪,我感觉我好水啊,有知道的大哥吗

怎么才能移除掉谷歌搜索泄漏的个人信息?

Posted: 18 May 2021 10:30 AM PDT

每次测试一下我的姓名和电话,谷歌总能搜出来。

其他的还好,主要是一搜姓名,电话和身份证都出来了,虽然知道知道吧没啥用,但总觉得很恶心,我的名字有生僻字,搜我的名字,马上就弹出来身份证号😭,搜电话更狠,身份证直接第一页第一个。。。

这个网站好像存在老久了,应该是学校泄露的 excel,我们这一届的都可以搜到,我向学校反应过,学校辅导员说上报了,可是从去年开始都快一年了,还没有解决。我打了举报信息泄露的电话,可是他们说,谷歌搜索,境外的管不了。从谷歌中请求删除信息,试了半天也不知道怎么移除。。。

心情复杂😪。。。

两个数据库互相定期增量同步数据有什么解决方案?

Posted: 18 May 2021 09:18 AM PDT

情况是这样的:

有一个需求,需要在 A 、B 两地同时提供服务( HTTP ),但是两地之间网络质量很差,延迟很高、并且经常有断线的情况,断线时长可能长达几小时,偶尔甚至会达到几天。如果只部署一个服务的话,则另一个地方的用户就会访问困难。

由于对两地数据实时性要求不高,所以考虑在 A 、B 两地分别部署一个 HTTP 服务端+一个数据库,两地的数据库做定期双向同步。

不考虑高可用,就两地分别单机部署就行,不需要考虑一边服务挂了切换到另一边做备用服务。(最好是服务挂了就挂了,立马人工去重启)

由于网络质量差,所以最好是增量同步、传输数据量越小越好。同步最好可以是自动的,或者可以用脚本自动跑的,网络原因同步失败,可以下次再重试。

对数据库的操作比较多的是插入,修改多以 inc 之类的操作为主,但也有少量的直接赋值更新的操作。数据删除采用的是标记删除字段的形式进行假删除,所以可以理解为不存在数据删除操作。

目前使用的是 MongoDB 数据库,但是也可以考虑切换为其他能满足需求的数据库。

请问,有什么现有的技术可以实现这样的一个服务形式吗?或者说这属于是什么同步方式、同步技术?

简单看了下 MongoDB 的"双活模式",貌似不太能满足定时同步的需求?

golang 的 tomb 怎么起作用的?

Posted: 18 May 2021 07:41 AM PDT

kill 的内部实现是这个样子

 func (t *Tomb) kill(reason error) { 	if reason == ErrStillAlive { 		panic("tomb: Kill with ErrStillAlive") 	} 	if reason == ErrDying { 		if t.reason == ErrStillAlive { 			panic("tomb: Kill with ErrDying while still alive") 		} 		return 	} 	if t.reason == ErrStillAlive { 		t.reason = reason 		close(t.dying) 		for _, child := range t.child { 			child.cancel() 		} 		t.child = nil 		return 	} 	if t.reason == nil { 		t.reason = reason 		return 	} } 

那按理来讲 <-tomb.Dying() 应该永远 block 才对呀

看不明白

Nextcloud 只在 SQLite 数据库下才能流畅运行,应该如何排查?

Posted: 18 May 2021 07:25 AM PDT

Docker Compose 文件:paste.ubuntu.com/p/DWmwB96rgs/
机器 10 核 60G 运行内存,运行 GitLab 非常流畅。但运行 Nextcloud 时非常卡顿,看 Chrome 的 Network 页每个请求 TTFB 都在 20 秒以上,负载 0.06 ,MySQL 和 PostgreSQL 都是这样。如果打开 Redis 则速度更慢,一堆请求超时。但是使用 SQLite 却没有任何问题,官方说 SQLite 性能很低,怎么到我这反过来了?

有没有支持这种功能的代理或者自己实现有什么好的方法?

Posted: 18 May 2021 06:48 AM PDT


比如有一个代理 117.114.58.53 ,它反向代理后一些后端服务,且只能启动一个端口 80,后端服务有 4 层的有 7 层的,但是就 7 层代理而言,需要后端 url 不同,这样才能区分,比如有两个被代理服务 A 和 B 文根都是 /api/nginx,这样代理就没法区分到底转发给谁了,我想了一个思路,就是在文根前加一个标识,比如 A 的变为 /A/api/nginx,/B/api/nginx,这样 nginx 就可以区分了,但是后端服务很多不支持这样修改 url 会返回 404 或者 301 302 这种,而且还有很多重定向什么的也会修改 url 。

所以想代理这块有没有能支持这种需求的,在不修改后端配置或者代码情况下,能处理这种自定义文根映射和处理重定向的。如果没有的话自己实现有什么可以借鉴的吗?

No comments:

Post a Comment