2023年3月

前言

对于Dapr ,在项目中也有用过一段时间,优缺点并存,但是瑕不掩瑜,目前随着版本的迭代和第三方团队对它的支持也使得我们用得更加得心应手,所以借此也回顾一下Dapr的相关知识以及分享一下项目中用到的第三方库
MASA.Framework
对Dapr的完美支持。然后本文只是个人学习与分享,不喜勿喷,谢谢!

什么是Dapr?

Dapr 是 Distributed Application Runtime (分布式应用运行时)的缩写。
Dapr是一种可移植的,serverless的,事件驱动的运行时,它使开发人员可以轻松构建弹性,无状态和有状态微服务,这些服务运行在云和边缘上,并包含多种语言和开发框架。
Dapr 的概念模型图:
overview.png
官方介绍

Dapr 环境配置

网上对于dapr自托管模式下的环境配置的教程也比较多了,所以这里就只简单介绍介绍几个需要注意的地方。首先在安装Dapr之前你或许需要能够进行科学的上网,如果发现冲浪速度不理想的话,那就或许需要在夜深人静的时候偷波塔了,当然你也可以选择离线安装,也比较简单,相信聪明的你们都能够一一搞定。

安装 Dapr CLI

执行命令:

powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex"

此命令会安装最新的 windows Dapr cli 并将$Env:SystemDrive\dapr此目录添加到用户 PATH 环境变量
然后通过重新启动终端/命令提示符并运行
dapr
命令来验证 CLI 是否已安装:

dapr

image.png
也可以在C盘和系统环境变量中查看验证
image.png
详细步骤可以参考
安装 Dapr CLI

安装 Docker Desktop

然后因为
Dapr CLI
默认会在
Docker
内启动
redis、zipkin、placement
。所以我们可以安装个
Docker Desktop
来增加dapr的体验性。安装完成后默认开启WSL2。
image.png
详细步骤可以参考
安装 Docker Desktop
当然还可以参考大佬的文章
手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序

初始化 Dapr

初始化dapr后,我们可以

  • 在本地获取并安装 Dapr sidecar 二进制文件。
  • 使用 Dapr 创建一个简化应用程序开发的开发环境。

Dapr初始化包括:

  1. 运行Redis 容器实例以用作本地状态存储和消息代理。
  2. 运行Zipkin 容器实例以实现可观察性。
  3. 使用上述组件定义创建默认组件文件夹。
  4. 运行Dapr 放置服务容器实例以支持本地参与者。

首先我们如果只使用dapr的服务调用的话,就可以只安装
精简版

dapr init --slim

如果想体验dapr完整功能支持的话,可以执行

dapr init

这里会从外网上拉取一些二进制文件,如果网络不好的话可能需要等待一段时间,如果长时间未能完成或出现网络相关错误的话,可以多尝试几次或者选择离线安装。
离线安装
这里稍微介绍:
执行上述dapr初始化命令后,无论最后是否成功,都会在
C:\Users\Administrator.dapr
生成一些文件 如:
image.png
然后如果最后失败的话,可能会导致bin文件中拉取的内容不完整。正常情况是这样:
image.png
所以我们离线安装的话,可以先使用命令

Dapr uninstall //删除bin文件夹 (这里选择此命令)
Dapr uninstall --all //删除 C:\Users\Administrator\.dapr 

就可以自己去dapr 的
GitHub
上下载对应版本的文件压缩包,然后把文件放入bin文件夹中即可。一般情况下,会自动解压缩。

  • dashboard_windows_amd64.zip
  • daprd_windows_amd64.zip

安装完成后可以执行命令验证:

dapr -v

image.png
详细步骤可以参考
初始化 Dapr

项目准备

  • dotNet 7
  • Docker Desktop
  • Visual Studio 2022
  • Dapr

项目搭建

我们先准备一个客户端项目-
DaprClientWeb
与两个服务端项目-
ServiceA

ServiceB
image.png
然后先在两个服务端项目中分别增加一个测试接口
ServiceA 项目示例
image.png
接下来我们先用dapr cli 请求接口验证一下环境可行性
使用命令行工具,跳转到
ServiceA
的源码目录,执行命令:

 dapr run --app-id service-a --app-port 5001 dotnet run

这个命令会调用基础 Dapr 运行时,并使应用程序和 Dapr sidecar一起运行
image.png
然后输入以下命令查看
Dapr sidecar
是否启动成功:

dapr list

image.png
最后接着输入以下命令访问接口:

dapr invoke --app-id service-a --method GetServiceA --verb GET

image.png
OK,环境到此验证完毕,项目也基本上搭建完成,下面会借助
客户端项目-DaprClientWeb 通过Dapr .Net SDK来分别请求ServiceA

ServiceB的接口 演示Dapr的服务调用。

Dapr 服务调用

Dapr 服务调用的工作原理

image.png

  1. 服务A 向服务B发起一个HTTP/gRPC的调用。调用转到了本地的Dapr sidecar
  2. Dapr使用名称解析组件发现服务B的位置
  3. Dapr 将消息转发至服务 B的 Dapr sidecar
  4. 服务B 的 Dapr sidecar将请求转发至服务B 上的特定端点 (或方法) 。 服务B 随后运行其业务逻辑代码
  5. 服务B 发送响应给服务A。 响应将转至服务B 的Dapr sidecar
  6. Dapr 转发响应至服务A 的 Dapr sidecar
  7. 服务 A 接收响应


:
Dapr sidecar之间的所有调用都通过gRPC来提高性能。 仅服务与 Dapr sidecar之间的调用可以是 HTTP或gRPC

注:
Dapr sidecar使用可插入的名称解析组件来解析服务 B 的地址。在自托管模式下,Dapr 使用
mdns
来查找它。 在 Kubernetes 模式下运行时,由 Kubernetes DNS 服务决定地址。

关于自托管模式下的mDNS:
image.png

综上我们可以得知:
Dapr是通过向每个计算单元注入了一个Sidecar容器/进程,然后运用Sidecar与事件触发器进行交互,并通过标准HTTP或gRPC协议与计算单元进行通信的

项目实战

我们在
DaprClientWeb
项目中增加两个接口分别用来请求
ServiceA
服务的
/GetServiceA
接口与
ServiceB
服务的
/GetServiceB
同时需要在
DaprClientWeb
项目中引入
Dapr.Client
Nuget包
代码:
image.png
注意:此处DaprClient是从DaprClinetBuilder Build出来的
ServiceA
image.png
ServiceB
image.png
执行命令:

 dapr run --app-id service-a --app-port 5001 dotnet run
 dapr run --app-id service-b --app-port 5002 dotnet run
 dapr run --app-id dapr-client-web --app-port 5003 dotnet run

查看效果:
image.png
然后我们通过
DaprClientWeb项目
请求接口
image.png
image.png
image.png
到这里我们已经可以使用dapr进行服务之间的通信了。但是每次都需要通过

dapr run

命令启动
dapr sidecar
这样岂不是太不优雅了,其中还包括几个
APPID,DAPR_HTTP_PORT,AppPort,DAPR_GRPC_PORT
需要管理,到时候服务一多肯定会十分头疼。其实这些问题都已经被一些大佬解决了,比如
MASA团队
就为此提供了很好地支持,我们只需在我们的项目中引入一个包就甚至可以通过一行代码就能够让项目轻松的使用Dapr了。

MASA DaprStarter

首先我们先在项目中引入
Masa.Contrib.Development.DaprStarter.AspNetCore
当前我用的版本是
1.0.0-preview.22
并且都在一直更新,还是比较稳定的,听说他们有全职的开源团队在维护与迭代,所以我们可以放心使用。
image.png
然后在各自项目的
Program.cs
中增加一行代码就可以了

builder.Services.AddDaprStarter(builder.Configuration.GetSection("DaprOptions"));

DaprClientWeb
示例:
image.png
当然需要在
appsettings.Development.json
文件中加入配置

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "DaprOptions": {
    "AppId": "service-a",//不指定的话会自动根据AppId + AppIdDelimiter('-') + AppIdSuffix 规则生成
    "AppPort": 5001,
    "AppIdSuffix": "",//当前机器网卡地址
    "DaprHttpPort": 8082,
    "DaprGrpcPort": 8083
  }
}

最后我们就只需直接启动项目就可以了,其他的就不用操心了。
看看效果:
image.png
细心的同学会发现这几个端口都变成我们在项目的
appsettings.Development.json
文件中配置的了

然后这里需要注意的是,这种用法只是在自托管模式下方便与本地开发调试使用,在生产环境上有基于k8s的另外一套用法,这里就不做多概述,感兴趣的同学可自行研究。

如果想了解
Masa.Contrib.Development.DaprStarter.AspNetCore
这个包的到底帮我们做了那些工作,可以去看看大佬的文章
一行代码让你的项目轻松使用Dapr
到此,基于dapr的服务调用已经差不多大功告成了,如果

MASA

的包用的爽了,记得去
GitHub
Star
一下。
赠人玫瑰,手留余香

结尾


由于文章篇幅有限,涉及到知识内容也不是很深入,感兴趣的同学可以自行研究。
然后本文都是基于我的个人理解,然后也有参考官网以及大佬的文章和视频,文章如有什么不妥的地方欢迎指正,共同进步。后续有时间还会继续学习相关技术知识,欢迎Star与关注。感谢阅读

2022 对于我个人和大家来说,都是值得记录的一年。

在 2022 年 5 月到 10 月这 5 个月,我经历自己的低谷,见到了自己的愚昧。在这里我分享下所见所思所感:

一个人是不是在生活艰难的情况下就必然有所成就呢?当然也不是。

大部分人其实会被人生的艰难压垮,有时候可能是因为过度疲劳,比如有的人一天工作十几个小时都没法糊口,都没法养活自己,这时候还让他有所成就,确实是不太容易的事情。

但一个人的艰难也可能会帮助他在未来取得更好的成就,我们都知道,艰难本身其实无所谓好坏,艰难的好坏来自于这个人对待自己所遇艰难的态度。这句话就是说,在生活中遇到困难以后,我们选择用什么样的态度来对待,事实上决定了我们生活的走向。


最近的几个点,深刻记录下:

1、做过,没有持续做....反正也不知道为啥;坚持,就是普通创业者最难的内心问题

2、朋友说:认识到自己是普通人,放下身段,就已经是进步了
我问,为哈读书的时候没人告诉我呢?
朋友说:人,也只有到了这个年纪,才会接触和理解这些,早些年说了你也不懂。

确实,身体力行才会深刻,刻到骨子里,这就是认知

3、朋友说:一个人知道自己为什么而活,就能忍受任何一种生活

看的越清楚,越通透,无非拒绝 or enjoy 加入。对于下里巴人的我,当然是后者

内心#


交易环节和次数越多,经济越繁荣

那财富,从何而来,答案是交易。两种经济:

一种中间人经济:比如 Affiliate / 带货 / 代理等等。最近比较火的助农【东方甄选】
一种生产者经济:自产自销。最近比较火的软件【Figma】,苹果 14

做中间人,成功率高,容易被复制,天花板低
做生产者,成功率低,不容易被复制,天花板相对高

商业模式#


正视自己,承认自己是普通人,不用改变世界,来改变某一个细分吧

Storemapper 的创始人 Tyler Tringas 提出了 Micro-SaaS 的概念:从一个细小且集中的用户痛点切入,专注利基市场,提供极度专业化的产品和功能

从小处切入,亦能撬动更广阔的市场

产品#


什么是创业认知?

很多学历不高的人,照样能把企业做大,创业相对成功。那是跟其认知有关。

认知,就是见识。见识,来源于创业实战的点滴,不是知识。

同样,创业还需要胆识。

关于 #能力#


对于 CEO 来说:

合伙人,就像男女朋友
Team Leader,就像好朋友
一线小伙伴,就像普通朋友

重要性也是按这个顺序
因此商业的散伙,要趁早:分手后放下前人,靠时间或 “新欢”

关于 #团队#


记住:别人的风口是别人的,你要找到你真正能驾驭的东西,千万别被别人影响了节奏。


雷军说的:首先要做你热爱的事情,然后再做你擅长的事情,最后实在不知道干什么,就撞到什么干什么。

干着干着,你说不定就能找到自己的热爱,然后就算就找不到也不是问题。不要把它当成一个问题,你把它当成问题你就很痛苦。

这就是真实的人的状态,就是找不到。

没有很多人能真正找到自己人生的意义,我的理解是不断寻找、不断探索。


创业的本质就是赚到钱、活下去

创业,一定不要自欺欺人,承认自己是在搞项目还是搞事业

想清楚现阶段到底要什么 以及 别太在乎别人的建议


追求财富,而不是金钱或地位。

财富是指在你睡觉时仍能为你赚钱的资产。
金钱是我们转换时间和财富的方式。
地位是你在社会等级体系中所处的位置。


想获得财富,你就必须知道做什么、和谁一起做、什么时候做。与埋头苦于相比,更重要的是理解和思考。
当然,努力非常重要,不能吝啬自己的努力,但必须选择正确的方式。

做什么? = 能做的事情很多,要舍得,决策选择一个事情
什么时候做? = 顺势而为,时机到没到?该不该现在做
和谁一起做? = 事在人为,靠谱的比专业的重要点


代码和媒体:

要想获得财富,就必须充分利用杠杆效应。商业杠杆来自资本、劳动力和复制边际成本为零的产品(代码和媒体)。


出来混,重要的是什么?
—— 是「出来」。


「简单有价值的事情长期坚持做』是成功最简单但也最难学的秘诀。不经过训练,人很难意识到时间复利的威力。

两个古老游戏的彩蛋,仙剑奇侠传的『十里坡剑神』和金庸群侠传的『十级野球拳』,就是简单的事情持之以恒反复做,最后就有巨大的威力。唐家三少成为网文收入第一,最重要的一步是十四年从未断日更。

这样的习惯和健身一样,一开始可能是成果不大的,坚持可能是枯燥的,但是数量上去突破临界点之后就顺了,效果就起来了。」

from @yusen


把所有的精力放在内容生产上,都是值得的,事做足了,获得成绩是必然的。


母亲对艾豪森威尔说:“发牌的是上帝,不管什么样的牌你都必须拿着,你能做的就是尽你的全力打好你手里的牌,求得最好的效果,人生同样如此。”


产品必须要让客户在使用产品的过程中自然而然地帮你传播产品,而非通过佣金优惠之类的方式推广


当你放下面子赚钱的时候,说明你已经懂事了。当你用钱赚回面子的时候,说明你已经成功了。当你用面子可以赚钱的时候,说明你已经是人物了。当你还停留在那里喝酒、吹牛,啥也不懂还装懂,只爱所谓的面子的时候,说明你这辈子也就这样了。

From 李嘉诚


输出内容,永远是免费获客或者找到合作的最佳方式,没有之一


个人来说,成一些事,努力是基础,天赋、能力、运气、资源都影响结果


抓住当下,能做什么,想做什么,赶快动手。因为鲁莽之中也蕴藏着能量与魔力。

-- 歌德


都说我们最终都会成为自己讨厌的人,但其实跟我一样,很多人都不知道自己想要成为什么样的人。

所以:

如果这个近期目标没有实现,可以再树立下一个目标。这样,人到死都能拥有众多的目标。人生就是这样的反反复复。

如果不知道自己想干什么,就先工作赚钱。只要工作,就可以得到米、酱、酱油、朋友和信任。可以一边工作,一边寻找真正想干的事,千万不要游手好闲。


不是干一件大事,而是做对一系列小事


我们一直要求用更少的资源去做更多的事情,但往往忽视如何做更少的事情,却创造更多的价值。


健康会带来才能,但才能却不可能带来健康。所以健康第一,才能第二。


互联网里面有很多新出来的方向,每个细分行业都有机会成为头部,多问问自己:为什么不能是自己?


很多时候,一个人不能成功,可能不是没天赋,也不是不努力,而是能给他支撑的家庭力量,实在太渺小了。


经济寒冬创业者就要务实

以战为练,磨团队;等有想法了,也可以快速 MVP 验证,也算是以战养战了


每个赚钱都不是看着那么容易的,容易的也不够持久。自己就这么点精力,别轻易杂七杂八东搞一下西搞一下


抓住一波波新平台的短期红利,其实就是长期

保持小规模,保持变好,而非盲目扩张变大


做任何事情,创业也一样,干中学,学中干。摸着石头过河


打败自己的永远不是其他,是自己。创业者一定要做喜欢做的业务,这样既长期又赚钱。

如果这个业务需要离赚钱还有一些路要走,那先能力解决饿死问题,死不了的同时,再继续往这个业务目标继续前进


企业增长阶梯式,稳一点,长期主义一点。这样的好处是:

CEO 的成长也是阶梯式的,也需要时间的沉淀


交谈是社交的基本功,一定要达到 60 分,尤其创业者:

  • 自己心里记住:不,你他妈不知道。让对方把话说完,认真倾听
  • 记住要问开放性的问题:Who、What、When、Where、Why、How
  • 不要好为人师;该你专业地方,天秀一把即可


创业选赛道很重要:

  • 做什么做好都不容易,选择做什么才是最关键
  • 选择某个小领域做到顶级
  • 宁可小领域做鸡头,也不要大领域做凤尾
  • 理论上没有什么蓝海,只有红海中找到细分领域的优势,成为该领域的鸡头


世界上有两种方法赚钱:

出卖劳动力
做生意,低买高卖:价格影响因素-市场/竞争对手


可持续设计理念,设计 10 原则:

创新、实用、美学价值、易于理解、不突兀、诚实、历久弥新、注重细节、保护环境、大道至简


老柯说:“人生的秘密就是只做一件事,就一件。只做一件事,其他的事都不值一提。”
米契又问:“那么,这件事到底是什么呢?”
老柯:“你必须自己找到它。”


如何成为一个更好的交谈者?

  1. 不要三心二意;处在那个环境、那个情景
  2. 不要好为人师;
  3. 使用开放性的问题;Who、What、When、Where、Why、How
  4. 顺其自然;
  5. 如果你不知道,你就说你不知道;
  6. 不要把自己的经历和别人比较
  7. 别重复自己的话;
  8. 少说废话;
  9. 认真倾听;
    10.简明扼要。

简明扼要,却又不时的旁征博引,使得整个演讲不仅浅显易懂,且诙谐幽默,同时又深入人心。不失为一段极为精彩的演讲。


“ 如果你想造一艘船,先不要雇人去收集木头,也不要给他们分配任何任务,而是去激发他们对浩瀚汪洋的渴望。 ”

“ 最佳的管理通过设定合适的情景而非试图控制员工以达到最大成果。”

“ 偶尔的战术复盘对增进团队间合作是必要的。”


公司要赚钱,有四个要素需要加以关注:满足客户需求(而不是只关注市场上的竞争状况),产生现金净流入,拥有较高的资本收益率并实现盈利性增长。


我在上学时有一个较大的遗憾,就是自己目标导向太明确,在追求第一、努力做个好学生上浪费了过多时间,损失了逆反、捣蛋的青春时光,后来才慢慢悟到“60分万岁是个好哲学”。


每天最首当其冲的工作,不是决定某件事该怎么处理,而是决定哪些事要尽快处理、哪些事暂不处理了。


据说把想法写下来有助于思考,因为只有想清楚的事情才能写得出来。所以,我正努力多写。


自我管理应该从时间管理开始。时间管理应该从起床时间开始管。

管理应该多关注输入而不是输出。所以,真正的关键不是几点起床,而是几点上床。

只要能坚持睡,早起就容易多了。相反,很晚睡却想很早起,自然是需要痛苦挣扎,而且不长久不健康的。


决定不能朝令夕改,有一定的时间周期,去验证和思考最好

任何事情,想清楚了就踏实干,想不清楚就让自己想清楚了再干


王兴的几点分享:

人生就是一场长达七八十年的和自己的恋爱,要理解,要宽容,要鼓励ta改变,但要接受ta一切不能改变的东西。

不错的鸡汤:成功者不是从不失败,而是从不放弃

「有什么,要什么,舍什么」这三个问题,对个人对公司都极重要

可以羡慕,不要嫉妒,更不要恨

不要什么都想要,也不要什么都不想要

索罗斯说重要的不是做出正确判断的频度,而是做出的正确判断的量级。巴菲特说自己一生做对的决定不过十来次

要经常提醒自己:速度、质量和成本,三者只能取其二

发财等于1%的灵感,加上99%的汗水

「尽信书不如无书」这道理没有错,但是在这个国家和时代,99.99%的人是读书 太少而不是太多,所以再提就很不合时宜。打个比方,如果你跟一个快要饿死的非洲难民说「别吃太多肉,不然有胆固醇太高的风险」,他但凡还有力气抬起手,一定要扇你一个大耳光

你是真的想要这份工作,还是仅仅想要这份工资?

对于一颗孤独的灵魂,工作是最好的容器

人人都是产品经理,产品即自己的一生

乔布斯的一生教育了我们,做任何事都应该追求极致,除了压榨自己的身体

一流的选择是做事,二流是评价别人做的事,三流是评价别人的评价

随便一件事,只要做到极致,就会有美感


《超级阿嬷的信》

★人只要有一项长处就可以。跑得快,会打棒球,性格开朗,不论是什么,只要有一点强过别人就可以。

★不能丢弃梦想。就算不能实现,梦想终归是梦想。如果这个梦想没有实现,可以再树立下一个梦想。这样,人到死都能拥有众多的梦想。人生就是这样的反反复复。

★如果不知道自己想干什么,就先工作。只要工作,就可以得到米、酱、酱油、朋友和信任。可以一边工作,一边寻找真正想干的事,千万不要游手好闲。

★人生到死都在消磨时间。任何人早晚都会死。因为同时还能赚到钱,靠工作来消磨时间是好好的方式。

★不论是聪明的人还是愚笨的人,不论是富人还是穷人,所有人出生五十年后,都一样是五十岁。

★也许现在没有钱,日子过得穷,但我认为贫穷是获得幸福的准备活动。所以,无论当初怎么艰苦,一定要坚持下去。

★人生既有山峰也有谷底。如果一度登上了山峰,下一步可能就是谷底。但在那里可以喝口冰凉的河水,洗洗身体,重振精神,然后再度登上更高的山峰。


《底层逻辑》

“人性的本质需求是繁殖 和 生存”

  • 工作本质大部分为了生存,"有人,就有竞争。有竞争,就有博弈"
  • 博弈就是 Game ,Game 就需要有人设计游戏规则,设计这个人就是管理者
  • 所以管理者,就应该设计出 竞争 这种游戏规则。让大家为了工作,为了生存,良心竞争起来


《一个广告人的自白》

通才,他们的使命是经营管理,而不是成为专才。

不论你多么勤奋苦干,也不论你知识多么渊博,35岁以前你是不可能代表公司接触客户决策层的。

我的一位同事把他得以被迅速提升归功于30岁就秃了头,另一位这样的幸运儿40岁就白了头。要有耐心。


《绝非偶然》

亦仁分享的赚钱认知更开阔的几个点:

1/ 即时正反馈:比如赚到第一块钱,积累第一个粉丝等,达到最小 & 正向的结果

2/ 利他:换位思考,为别人先带来价值,而不是想着收割别人

3/ 不设限:2022Q2 短期目标 -> 三/五年中长期期目标 -> 十年愿景

4/ 高质量信息输入管道:信息漫天飞舞的时代,有时候选择正确的信息通道更重要。选择大于努力,先选择,再努力

5/ 商业思维小闭环:原文说是,流量、产品、变现,我觉得是 流量 -> 销售 -> 产品交付

6/ 异常值思维:比如呱呱七夕、比如冰墩墩等等异常情况,一定要看下 Caused By (程序员思维)

7/ 组合思维:新瓶装旧酒,微创新;普通人就微创新即可,持续不断微创新即可


《向死而生》

书中说:“我一直笃信“付出总有回报”,出差的时候吩咐秘书尽量选夜间航班,下了飞机可以立即洽谈公事。”

我也相信努力,相信努力总比不努力好
我相信命的意思是,我相信 有些东西不是努力可以解决的,甚至不是你可以解决的。

困难在于,你无法知道哪些东西努力可以解决,哪些不可以。所以,为了不错过那些努力可以解决的东西,你最好还是努力点


对于死亡这件事,我已经越来越平静,也越来越忽略它。活着的每一天,把每件事情做好,尽好自己的每一个责任,就不白白过这一生。不要去想太多死亡的事情,它来或不来,谁也控制不了。

活比死要重要得多。

死意味着永远离开,意味着你本来正在做、应该做的事情再也没有办法去做了。有些人本来可以因为你活着,可以生活得平平静静,但死会让这个平静永永远远丧失掉。

《褚时健传》


一个企业家起码要具备两种能力,一是引导自己的能力,二是帮助他人的能力。

因为没有他人,这些事情也做不成。

另外管人不在表面上,你要自己内功过关,自己在业务上成熟,才能服众。

企业经营#


大部分国内的 SaaS 中大公司:

  • 缺流量
  • 重销售
  • 重产研
  • 重服务

大团队,还要融资,还做大客户的定制化需求,殊不知如果没有好的模式,大客定制是慢性毒药

怎么破局?几个关键词:

  • 小团队
  • 重流量 & 产品
  • PLG:产品驱动增长
  • 自动成交
  • 轻服务

SaaS#


切交易,是商业的本质

大赛道 PLG ,坚持产品主导,产品驱动增长

关注时代的机遇,在红海中找到优缺点,打破缺点去完善产品

稳健时期,要讲发展
发展时期,要讲稳健

原文链接

https://bysocket.com/saas-50-think/

出处:公号「程序员泥瓦匠」
博客:
https://bysocket.com/

内容涵盖 Java 后端技术、Spring Boot、Spring Cloud、微服务架构、运维开发、系统监控等相关的研究与知识分享。

不要做这个时代的最后一只恐龙。

IMMENSE、36氪|作者

1811年11月,英国,诺丁汉市西北一处小镇里,一群愤怒的纺织工人挥舞着锤头与斧子,一窝蜂地冲进车间里,将几台机器砸得粉碎。

后来,这场运动的大火熊熊燃烧到整个英格兰大陆,这些反抗工业化的人们被称为“卢德主义者”。

他们是被工业革命灭绝的最后一只恐龙。

01 “未来是属于AI的”

3月2日,内容创作圈大地震。

就在3月2日凌晨,OpenAI宣布开放ChatGPT本体模型API,其价格为1k tokens/$0.002。也就是说,从这一天开始,任何企业都能让ChatGPT为自己打工,而价格仅仅是每输出100万个单词18元人民币(2.7美元)。

如果对这个价格没有概念的话,举个例子。今年,河南省鹤壁市淇县某机动车维修店招聘文案编辑,店里开出的最低薪酬是2000元/月,学历不限。

图片方面,早在ChatGPT走红之前,AI绘画早已引发了艺术圈的一场大地震。

去年9月,一幅由AI创作的绘画作品《太空歌剧院》获得美国科罗拉多州艺术博览会数字艺术类别冠军,几乎标志着AI作画的“AlphaGo时刻”。


《太空歌剧院》(Théâtre D'opéra Spatial)

这幅作品是基于AI生成的画作加上人类画师的后期绘制,这一点被业内人士大为诟病,指责作者以AI为噱头,实际上依旧需要人类加工。

这些质疑AI作画能力的人忽略了一个重要因素——进化。

人们往往极大低估了AI大模型的学习与进步能力。仅仅在几年之前,人工智能还是被戏称为“人工智障”的存在。人们时常拿间或出现的“翻车”案例证明AI与人类的差距,却忽略了这项技术在最近数年间突飞猛进的进化能力。

在知乎“AI绘画半年了,到目前为止,AI绘画让多少画师失业了?未来又会有多少?”的这条问题底下,3202人点赞了同一条回答:

“AI对美术行业的冲击是巨大的,这个效应会在未来两三年随着显卡升级大爆发,美术行业会变的卷中卷,50%的人可能面临转行。”

“……我只是在做劝退而已,我希望新人不要跳火坑了,未来是属于AI的。”

也许有人认为,文字与图片都是高度结构化的信息,能够被轻易替代无可厚非。但是,视频内容信息量大、非结构性数据多,是AI尚未攻克的坚固堡垒,也是内容创作者最后一块自留地。

事实并非如此。

早些年DeepFake换脸带来的恐慌暂且不论,近年间,谷歌、Meta(Facebook)陆续发布Phenaki、Imagen Video、Make-A-Video AI视频自动生成模型,其效果有时足以以假乱真。

没有创作者能够和这样的力量抗争。

02 “没有人的文明,毫无意义”

在ChatGPT刚火起来那阵子,网上流传过一个笑话:

“快进到10年以后,乙方方案全部由ChatGPT生成,甲方方案全部由ChatGPT审核。双方合作大半年,一点工作没干过。”

这个笑话引人发笑的荒谬之处显而易见——双方的工作都没有意义。

如果更进一步思考,什么是意义?

无独有偶,在今年春节档爆款电影《流浪地球2》中,一句广为流传的台词给出了答案:“没有人的文明,毫无意义。”

是的,ChatGPT本质上依旧是为人类所设计、制造、使用的工具,认为这项技术将会替代人类文明实际上是一种本末倒置。

就像历史上其他人认为怀疑自我存在意义的时刻一样,在工业革命之后,电视、计算机、手机、互联网、云计算,这种种新兴科技产品都曾在不同时间段引发过人们的恐慌。

人工智能也不例外。早在1997年,IBM的深蓝计算机就已在国际象棋比赛中打败了世界冠军卡斯帕罗夫。全球在深蓝赢得比赛之后陷入了兴奋与恐慌,“机器将会在未来取代人类,占领地球”的言论层出不穷。

可事实上,20多年过去了,如今我们每一个人的智能手机算力都足以与当年的深蓝相匹敌,但人类文明并没有因此而终结。

正如美国政治记者与作家诺曼·卡曾斯在其1935~1974年所撰写的《人的选择》一书中所载:文明的建立,靠的不是机器,而是思想。

21世纪的今天,机器占领人类文明的事件不但没有发生,科技、工业、自动化的进步反而让边远山区通水通电,让大规模消费日用品的价格低到人人可享,让每一个人的生活都比我们两个世纪以前最优渥的祖先都要更便捷、更丰腴、更自由。

即便是如今引发大量恐慌的ChatGPT类AIGC技术,也在不断被运用于普惠人类、降低服务门槛的地方。

比如,基于人口统计学、相关的病史或流行病学风险因素,Glass.health AI能够辅助医生更快速、更准确地诊断病人;

而基于AI文档分析技术,Humata.ai能够快速帮助用户提取文档中的有价值信息,降低技术文档、法律文档等专业文件的阅读难度,让缺乏相关训练的普罗大众能够更好地保护自身利益;

基于AI文本摘要和TTS技术生成的口播文案,AI绘画生成的贴纸、特效等不断应用在短视频生产领域,进一步降低了短视频生产门槛,越来越多的内容创作者搭上了短视频的“快车”。

其他关于AI写作、AI绘画、AI视频等的AI创作工具则更是层出不穷。小到脚本错别字检查,大到分镜设计与画面排版,曾经困难重重的内容创作环节被不断拆解重构,降低入门门槛。

而AI与AI使用者的关系,也在这一次次的工具迭代之中,被时代所不断解构、重组、赋予了新的内涵。

举个例子,2021年5月,安徽的一名小伙子突然在网络上走红。

此前的几年间,通过AI技术,他累计帮助了超过500人“复活”了亲人们的老照片。那些泛黄模糊的照片经过他一顿操作,不仅变得更清晰明亮,还能朝着电脑前的亲人眨眼、微笑、摆头。

看着自己6岁时就去世的父亲重新在电脑屏幕上“活过来”,那些哭得情难自禁的情景,也许才是AI与文明的真实意义。

03 是颠覆者,更是解放者

在祛除了对AI的盲目崇拜与盲目恐惧之后,我们终于可以稍微理性地看待AIGC这回事。

一直以来,在内容创作的过程中,都存在着大量的重复动作,它们繁琐、冗余、耗时极长却又本质上与创作无关。

比如,文稿校对者为了找出错别字,一次又一次地重复阅读一篇文章,读得眼睛都发酸、发胀。

再比如,画家灵感迸发,在画布上挥毫而就一幅巨作,然后花上十倍的时间对整幅画面的每一处细节重复勾线、加阴影、卡闭塞、勾线、加阴影、卡闭塞……

视频制作则更是重灾区。视频拍摄的原始素材动辄长达几十、甚至几百小时,后期剪辑师不仅要用肉眼逐一观看,还要一而再再而三地对其进行重复识别、筛选、剪辑切割,在AI出现之前还要用耳朵一遍遍听原片内容,手动添加字幕。

这些过程既无趣,又冗长,而且与真正的人类创造力几乎毫无关系。创作者们的大量精力都被分散到了这些重复环节,真正用来创作的部分少之又少。

AIGC对于内容创作者的意义,正是将他们解放出来,让创作者的精力更好地用于探索创意极限,而重复、冗杂的工作交给AIGC,让创作者的产能不再受到制约,让优质内容能够爆炸式增长。

听起来这一天似乎很遥远,但实际上,由AI辅助生成的创意内容已经来到了我们身边。

去年冬奥期间,央视体育新媒体和总台技术团队联合阿里云视频云、达摩院,打造了“AI云智剪”智能视频剪辑工具。

基于阿里AI视频理解技术EMC2与阿里云强大的流媒体处理能力,AI云智剪能够实时解析并提取赛事视频中的运动员信息、精彩动作、镜头类型、赛程信息、运动员特点等,并自动生成多种类型的集锦视频,大规模解放剪辑师压力。

去年整个冬奥期间,阿里AI云智剪共生产出39878段素材,时长超过200小时,覆盖超200场比赛。

除了AI视频生成之外,通过和云计算结合,AIGC还能够从根源上颠覆电视台与演播室的工作流程,将原本庞大、复杂、昂贵的演播环节,全部集成在一台普通的手机上。

比如,在连续多届的全国两会期间,人民日报新媒体记者的手机里就装进了一款内容创作增效“神器”:两会“AI编辑部”移动版。

这是基于阿里云视频云的“AI编辑部”衍生而来的定制化智能媒体生产产品。通过“AI编辑部”,记者所拍摄的现场视频素材既能由5G网络同步回传后方,也能由记者在前方即时剪辑。从发现线索、获取素材,到拍摄制作、审核签发,以及发起直播、连麦访谈等系列动作,都能通过一部手机实时完成。

在当前的AIGC领域,AI全自动生成的文字与图片,在不少时刻都几乎能达到“以假乱真”的效果。在视频制作领域,对比文字、图片,视频的信息量最大、非结构化数据最多,AI需要对于视频内人物、物品、场景、关系等高阶信息进行理解,加之视频制作本身对于审美、节奏、画面、BGM的极高要求……

AI全自动生成过程虽然略显漫长,但并不是那么天方夜谭的未来。

冬奥会的AI云智剪,面向特定的赛事场景,限定了素材集的范围,套用成熟的编排模式,由AI负责素材的预处理,并按预设模版进行编排,这是AIGC的序曲,实现了视频全智能生产的第一个阶段。

AIGC的第二个阶段,AI除了负责素材的预处理,还能完成本属于视频创意环节的编排工作,从而实现智能批量混剪。

第三阶段,面向特定场景和特定要求的成品,由AI根据已有成片反向解构分镜头,负责素材的搜索、筛选、处理、编排,并最终制作合成。

第四阶段,面向特定场景,AI负责理解场景的要求,包括素材的搜索、筛选(以及部分素材生成)、处理、编排,并最终制作合成。

AIGC视频生成的终极阶段,由AI挖掘视频制作的兴趣点及创意点,并完成相应的制作。

当然,在此之前,AI视频制作依旧面临着一个迫在眉睫的挑战——算力。

一段文字、一张图片、一段视频,处理它们所需要的算力级别呈指数型爆炸上升。

这道题,云计算成了唯一的答案。

目前,云计算和人工智能的结合正处于技术突破和发展的关键时期,生成式AI正在发生颠覆性突破,阿里巴巴将全力构建自己的AI预训练大模型,并为市场上风起云涌的模型和应用提供好算力的支撑,阿里董事会主席兼首席执行官张勇在今年2月的财报会上表示。

04 结语

早在1956年,以约翰·麦卡锡、马文·明斯基、克劳德·香农等为代表的科学家们就在美国达特茅斯组织了一场为期两个月的人工智能夏季研讨会,开启了人工智能技术的探索之路。

半个多世纪后的今天,在云计算、深度学习、万亿级参数大模型等相关技术的发展之下,AIGC才第一次真正走进我们的生活,它在绘画、作曲、视频等创作领域几乎完美地替代了重复人工,进而将成为革命性意义的新时代生产力工具。

3月15日凌晨,OpenAI正式上线了新一代人工智能大模型 GPT-4。与它的上一代相比,这款多模态模型不仅可以接受文本输入,甚至已经可以接受图像等其他模态的信息输入,离真正的通用型人工智能又近了一步。

回望那场发源于英国的卢德运动,它曾轰轰烈烈地盛极一时,却不曾阻止英国在第一次工业革命中迅速崛起,不断发展工业化技术,生产效率迎来跨时代的大爆发,终成一代霸主。

同理,不要温和地走进这场AIGC,也不要做这个时代最后一只恐龙。

当人类优渥于一种状态,总有想象力来冲破平衡。Cloud Imagine《云想之力》是阿里云联合36氪共同打造的系列报道,旨在探索云计算大背景下爆发的应用场景和新兴技术,以想象的高维碰撞之力,窥探“云”上的无限空间。从蒸汽机到人工智能,一切生产力工具都是为了将人类从繁冗的劳动中解放出来,将时间与精力留给创意与想象的破界。

简介

  • MongoDB 是由 C++ 编写的开源 NoSQL 和基于文档的数据库。MongoDB 提供了面向文档的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常流行的文档类型数据库。
  • MongoDB 是非关系型数据库当中功能最丰富,最像关系型数据库的。它支持的数据结构非常松散,会将数据存储为一个文档,数据结构由键值对(key=>value)组成,是类似于json的bson格式,字段值可以包含其它文档、数组和文档数组,因此可以存储比较复杂的数据类型。
  • 在高负载的情况下,MongoDB 天然支持水平扩展和高可用,可以很方便地添加更多的节点/实例,以保证服务性能和可用性。在许多场景下,MongoDB 可以用于代替传统的关系型数据库或键/值存储方式,皆在为 Web 应用提供可扩展的高可用高性能数据存储解决方案。

为什么使用MongoDB

以下是一些为什么应该开始使用MongoDB的原因

  • 面向文档的–由于MongoDB是NoSQL类型的数据库,它不是以关系类型的格式存储数据,而是将数据存储在文档中。这使得MongoDB非常灵活,可以适应实际的业务环境和需求。
  • 临时查询-MongoDB支持按字段,范围查询和正则表达式搜索。可以查询返回文档中的特定字段。
  • 索引-可以创建索引以提高MongoDB中的搜索性能。MongoDB文档中的任何字段都可以建立索引。
  • 复制-MongoDB可以提供副本集的高可用性。副本集由两个或多个mongo数据库实例组成。每个副本集成员可以随时充当主副本或辅助副本的角色。主副本是与客户端交互并执行所有读/写操作的主服务器。辅助副本使用内置复制维护主数据的副本。当主副本发生故障时,副本集将自动切换到辅助副本,然后它将成为主服务器。
  • 负载平衡-MongoDB使用分片的概念,通过在多个MongoDB实例之间拆分数据来水平扩展。MongoDB可以在多台服务器上运行,以平衡负载或复制数据,以便在硬件出现故障时保持系统正常运行。

MongoDB的重要特性

  • 查询:它支持临时查询和基于文档的查询。
  • 索引支持:文档中的任何字段都可以被索引。
  • 复制:它支持主从复制。MongoDB 使用本机应用程序来维护数据的多个副本。防止数据库停机是副本集的功能之一,因为它具有自我修复的分片。
  • 多台服务器:数据库可以运行在多台服务器上。在硬件故障的情况下,数据被复制以防止系统发生故障。
  • 自动分片:此过程将数据分布在多个称为分片的物理分区中。由于分片,MongoDB 具有自动负载平衡功能。
  • MapReduce:它支持MapReduce和灵活的聚合工具。
  • 故障处理:在 MongoDB 中,很容易处理故障情况。大量的副本提供了更高的保护和数据可用性,以防止数据库停机,例如机架故障、多台机器故障和数据中心故障,甚至网络分区。
  • GridFS:无需使堆栈复杂化,可以存储任何大小的文件。GridFS 功能将文件分成更小的部分并将它们存储为单独的文档。
  • 无模式数据库:它是一个用 C++ 编写的无模式数据库。
  • 面向文档的存储:它使用 BSON 格式,这是一种类似 JSON 的格式。
  • 过程: MongoDB JavaScript 运行良好,因为数据库使用语言而不是过程。

MongoDB 数据类型

  • 字符串 -必须是 UTF-8 有效
  • Integer -根据服务器存储 32 位或 64 位的数值
  • Boolean -存储真/假值
  • Double -存储浮点值
  • Min/Max keys -将值与最低和最高 BSON 元素进行比较
  • Arrays -将数组、列表或多个值存储到一个键中
  • Date -以 UNIX 格式存储当前日期或时间
  • 时间戳 -用于记录文档的修改或添加
  • 对象 -用于嵌入文档
  • 对象 ID -存储文档的 ID
  • 二进制数据 -用于存储二进制数据
  • Null -存储空值
  • Symbol -与字符串相同,但主要用于具有特定符号类型的语言
  • 代码 -用于将 JavaScript 代码存储到文档中
  • Regular expression -存储正则表达式

MySQL与 MongoDB 一些对比

数据库 MySQL MongoDB
数据库模型 关系型 非关系型
存储方式 不同引擎有不同的存储方式 以类JSON的文档的格式存储
查询语句 SQL语句 MongoDB查询方式(类似JavaScript的函数)
数据处理方式 不同引擎有自己的特点 基于内存,将热数据存放在物理内存中,从而达到高速读写
成熟度 成熟度高 新兴数据库,成熟度较低
广泛度 开源数据库,市场份额不断增长 NoSQL数据库中,比较完善且开源,使用人数在不断增长
事务性 支持事务操作 仅支持单文档事务操作,弱一致性
占用空间 占用空间小 占用空间大
join操作 MySQL支持join MongoDB没有join

MySQL与 MongoDB 对应的术语:

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

MongoDB 架构

  • 数据库:简单来说,可以称为数据的物理容器。每个数据库在文件系统上都有自己的一组文件,多个数据库存在于单个 MongoDB 服务器上。
  • 集合:一组数据库文档可以称为一个集合。RDBMS 相当于一个集合是一个表。整个集合存在于单个数据库中。涉及集合时没有模式。在集合中,各种文档可以有不同的字段,但集合中的文档大多用于相同的目的或服务于相同的最终目标。
  • 文档:一组键值对可以指定为一个文档。文档与动态模式相关联。拥有动态模式的好处是单个集合中的文档不必拥有相同的结构或字段。此外,集合文档中的公共字段可以具有不同类型的数据。

MongoDB核心组件及其用法包括:

  • 集合 —— 它们是一组 MongoDB 文档。它们的 RDBMS 对应物是表。必须了解集合不强制执行任何结构。集合始终存在于单个数据库中。
  • 文档 —— 这是一个以 BSON 格式存储的数据集合。它的 RDBMS 对应物是 Row。MongoDB 中的记录称为文档。MongoDB 中的文档包含字段名称及其对应的值。
  • 字段 —— 这是 MongoDB 文档中的单个元素,它包含作为字段和值对的值。在关系数据库中,字段类似于列。简单来说,字段可以称为文档中的名称-值对。
  • _id   —— 每个 MongoDB 文档都需要这个字段。_id 字段可以等同于关系数据库中的主键。它表示 MongoDB 文档中的唯一实例或值。如果您有意在 MongoDB 中创建一个没有 _id 字段的文档,它将自动生成。
  • 游标 —— 这是一个指示查询集合结果的指针。通过游标的帮助,客户端可以检索结果。
  • JSON —— 这是一种 JavaScript 表示法。它是纯文本,一种用于表达结构化数据的人类可读格式。数以千计的编程语言支持 JSON。
  • 数据库 —— 就像在 RDBMS 中,数据库是表容器,在 MongoDB 中,数据库是集合容器。每个数据库在文件系统上都包含自己的文件集。因此,MongoDB 服务器可以存储多个数据库。

MongoDB 的优势

  • 1. 分布式数据平台
    • 在地理分布的数据中心和云区域中,MongoDB 可以运行以确保更高级别的可用性和可扩展性。
    • 无需停机且无需更改您的应用程序,MongoDB 可在数据量和吞吐量方面进行弹性扩展。
    • 该技术为您提供了跨各种数据中心的足够灵活性,并具有良好的一致性。
  • 2. 快速迭代开发
    • 不断变化的业务需求将不再影响您企业中项目的成功交付。
    • 具有动态模式的灵活数据模型,以及强大的 GUI 和命令行工具,使开发人员能够快速构建和发展应用程序。
    • 自动配置支持持续集成和交付以实现生产运营。
    • RDBMS 的静态关系模式和复杂操作现在已成为过去。
  • 3. 灵活的数据模型
    • MongoDB 将数据存储在灵活的类 JSON 文档中,这使得数据持久化和合并变得容易。
    • 应用程序代码中的对象被映射到文档模型,因此处理数据变得容易。
    • 不用说,模式治理控制、数据访问、复杂聚合和丰富的索引功能不会以任何方式受到损害。
    • 无需停机,就可以动态修改架构。
    • 由于这种灵活性,开发人员无需担心数据操作。
  • 4. 降低 TCO(总拥有成本)
    • 使用 MongoDB 时,应用程序开发人员可以更好地完成工作。
    • 得益于 Atlas Cloud 服务,运营团队也可以出色地完成工作。
    • 由于 MongoDB 在商品硬件上运行,因此成本显着降低。
    5.集成功能集
    • 由于分析和数据可视化、事件驱动的流数据管道、文本和地理空间搜索、图形处理、内存性能,人们可以获得各种实时应用程序。
    • RDBMS 要实现这一点,需要额外的复杂技术以及单独的集成要求。

MongoDB 的缺点

  • 在 MongoDB 中,没有合并表的方法;因此,每次需要使用此功能时,都必须手动完成,导致编码难看且耗时。
  • 它使用大量内存,因为它必须为每个文档存储密钥,因为可能存在数据冲突。
  • 当您开始使用一项功能时,它会锁定整个数据库,从而导致并发问题。
  • 它不会自动执行此操作;因此用户必须手动确保该操作是一个事务。

场景应用

适用场景

    • 网站数据:Mongo 非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
    • 缓存:由于性能很高,Mongo 也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo 搭建的持久化缓存层可以避免下层的数据源过载。
    • 大尺寸、低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
    • 高伸缩性的场景:Mongo 非常适合由数十或数百台服务器组成的数据库,Mongo 的路线图中已经包含对MapReduce 引擎的内置支持。
    • 用于对象及JSON 数据的存储:Mongo 的BSON 数据格式非常适合文档化格式的存储及查询。

不适场景

    • 高度事务性的系统:例如,银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
    • 传统的商业智能应用:针对特定问题的BI 数据库会产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
    • 需要SQL 的问题。

MongoDB的版本号解释

MongoDB的版本号分为3位:主版本.次版本.修订号。

  • 主版本(主要版本):当有重大更新时更新主版本号。例如支持WT引擎时主版本号从2升级到3;支持事务功能时从3升级到4;
  • 次版本(快速发布):发布新功能时更新次版本号。以奇数次版本号作为开发版,给大家尝鲜用,但不应用于生产环境;以偶数次版本号作为稳定版,适合生产环境使用。这就是为什么大家在下载网站上只看到4.0,4.2,4.4而无法找到4.1,4.3,4.5的原因。
  • 修订号(补丁版本):每隔一定时间发布一次,包含近期内所有的bugfix。修订号不做任何功能上的更新,只用于发布bugfix。所以只要主/次版本号一致时,更新修订号可以完全向前兼容。

主/次版本基本上保持一年一次的更新频率,修订号不定期发布。

MongoDB官方下载网站:

安装MongoDB社区版

CentOS7准备环境

[root@MongoDB-01 ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
[root@MongoDB-01 ~]# uname -r
3.10.0-1160.83.1.el7.x86_64

[root@MongoDB-01 ~]# systemctl stop firewalld
[root@MongoDB-01 ~]# sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/sysconfig/selinux
[root@MongoDB-01 ~]# setenforce 0
[root@MongoDB-01 ~]# ntpdate 0.centos.pool.ntp.org
[root@MongoDB-01 ~]# yum install net-tools vim wget curl -y
  • MongoDB 5.x
创建/etc/yum.repos.d/mongodb-org-5.0.repo文件
[mongodb-org-5.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/5.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-5.0.asc
# 安装最新稳定版本的 MongoDB
# yum install -y mongodb-org 
==================================================================================================================================================
# 如要安装特定版本的 MongoDB,请单独指定每个组件包并将版本号附加到包名称,例如
yum install -y mongodb-org-5.0.0 mongodb-org-database-5.0.0 mongodb-org-server-5.0.0 mongodb-org-shell-5.0.0 mongodb-org-mongos-5.0.0 mongodb-org-tools-5.0.0 
# yum当更新版本可用时升级软件包。为防止意外升级,请固定包。要固定包,请将以下exclude指令添加到您的/etc/yum.conf文件中
exclude=mongodb-org,mongodb-org-database,mongodb-org-server,mongodb-org-shell,mongodb-org-mongos,mongodb-org-tools
==================================================================================================================================================
  • MongoDB 6.x
# 创建/etc/yum.repos.d/mongodb-org-6.0.repo文件
[root@MongoDB-01 ~]# cat /etc/yum.repos.d/mongodb-org-6.0.repo
[mongodb-org-6.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc

# 安装最新稳定版本的 MongoDB
[root@MongoDB-01 ~]# yum install -y mongodb-org
================================================================================================================================================== # 如要安装特定版本的 MongoDB,请单独指定每个组件包并将版本号附加到包名称,例如 yum install -y mongodb-org-6.0.0 mongodb-org-database-6.0.0 mongodb-org-server-6.0.0 mongodb-org-mongos-6.0.0 mongodb-org-tools-6.0.0 # yum当更新版本可用时升级软件包。为防止意外升级,请固定包。要固定包,请将以下exclude指令添加到您的/etc/yum.conf文件中 exclude=mongodb-org,mongodb-org-database,mongodb-org-server,mongodb-mongosh,mongodb-org-mongos,mongodb-org-tools ==================================================================================================================================================
[root@MongoDB-01 ~]# rpm -qa | grep mongodb
mongodb-mongosh-1.8.0-1.el8.x86_64 mongodb-org-database-tools-extra-6.0.5-1.el7.x86_64 mongodb-org-mongos-6.0.5-1.el7.x86_64 mongodb-org-database-6.0.5-1.el7.x86_64 mongodb-database-tools-100.7.0-1.x86_64 mongodb-org-tools-6.0.5-1.el7.x86_64 mongodb-org-server-6.0.5-1.el7.x86_64 mongodb-org-6.0.5-1.el7.x86_64 [root@MongoDB-01 ~]# mongod --version db version v6.0.5 Build Info: { "version": "6.0.5", "gitVersion": "c9a99c120371d4d4c52cbb15dac34a36ce8d3b1d", "openSSLVersion": "OpenSSL 1.0.1e-fips 11 Feb 2013", "modules": [], "allocator": "tcmalloc", "environment": { "distmod": "rhel70", "distarch": "x86_64", "target_arch": "x86_64" } } # 默认配置文件 [root@MongoDB-01 ~]# grep -Ev "^$|#" /etc/mongod.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log storage: dbPath: /var/lib/mongo journal: enabled: true processManagement: timeZoneInfo: /usr/share/zoneinfo net: port: 27017 # 确保运行MongoDB的用户有权访问 [root@MongoDB-01 ~]# grep mongo /etc/passwd mongod:x:997:996:mongod:/var/lib/mongo:/bin/fals [root@MongoDB-01 ~]# ls -ld /var/log/mongodb/mongod.log /var/lib/mongo drwxr-xr-x 4 mongod mongod 4096 Mar 23 10:24 /var/lib/mongo -rw-r----- 1 mongod mongod 20102 Mar 23 10:24 /var/log/mongodb/mongod.log [root@MongoDB-01 ~]# systemctl start mongod [root@MongoDB-01 ~]# ps aux | grep mongod mongod 1225 14.8 2.3 2659472 93396 ? Ssl 11:54 0:00 /usr/bin/mongod -f /etc/mongod.conf root 1269 0.0 0.0 112808 968 pts/0 S+ 11:54 0:00 grep --color=auto mongod [root@MongoDB-01 ~]# netstat -ntpl | grep mongod tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 1225/mongod [root@MongoDB-01 ~]# systemctl enable mongod
  • 卸载MongoDB
[root@MongoDB-01 ~]# systemctl stop mongod
[root@MongoDB-01 ~]# ps aux | grep mongod
root       2129  0.0  0.0 112808   968 pts/0    S+   12:11   0:00 grep --color=auto mongod
[root@MongoDB-01 ~]# yum erase $(rpm -qa | grep mongodb-org)
[root@MongoDB-01 ~]# rm -r /var/log/mongodb
[root@MongoDB-01 ~]# rm -r /var/lib/mongo 




Ubuntu准备环境

root@ubuntu-1804:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.6 LTS
Release:	18.04
Codename:	bionic
root@ubuntu-1804:~# 
root@ubuntu-1804:~# uname -r
4.15.0-163-generic

root@ubuntu-1804:~# ufw disable
Firewall stopped and disabled on system startup
root@ubuntu-1804:~# ufw status
Status: inactive
root@ubuntu-1804:~# apt list --installed | grep mongo
  • MongoDB 5.x
# 导入密钥
root@ubuntu-1804:~# apt-get install gnupg root@ubuntu-1804:~# wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | apt-key add - # 创建/etc/apt/sources.list.d/mongodb-org-5.0.list文件 root@ubuntu-1804:~# echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list root@ubuntu-1804:~# apt-get update # 安装最新稳定版本的 MongoDB root@ubuntu-1804:~# apt-get install -y mongodb-org ======================================================================================================================================================================= # 如要安装特定版本的 MongoDB,请单独指定每个组件包并将版本号附加到包名称,例如 sudo apt-get install -y mongodb-org=5.0.0 mongodb-org-database=5.0.0 mongodb-org-server=5.0.0 mongodb-org-shell=5.0.0 mongodb-org-mongos=5.0.0 mongodb-org-tools=5.0.0 # apt-get当更新版本可用时升级软件包。为防止意外升级,请固定包。 root@ubuntu-1804:~# echo "mongodb-org hold" | sudo dpkg --set-selections root@ubuntu-1804:~# echo "mongodb-org-database hold" | sudo dpkg --set-selections root@ubuntu-1804:~# echo "mongodb-org-server hold" | sudo dpkg --set-selections root@ubuntu-1804:~# echo "mongodb-org-shell hold" | sudo dpkg --set-selections root@ubuntu-1804:~# echo "mongodb-org-mongos hold" | sudo dpkg --set-selections root@ubuntu-1804:~# echo "mongodb-org-tools hold" | sudo dpkg --set-selections =======================================================================================================================================================================
  • MongoDB 6.x
# 导入密钥
root@ubuntu-1804:~# apt-get install gnupg
root@ubuntu-1804:~# wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
OK
# 创建/etc/apt/sources.list.d/mongodb-org-5.0.list文件
root@ubuntu-1804:~# echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
root@ubuntu-1804:~# apt-get update

# 安装最新稳定版的 MongoDB
root@ubuntu-1804:~# apt-get install -y mongodb-org
=======================================================================================================================================================================
# 如要安装特定版本的 MongoDB,请单独指定每个组件包并将版本号附加到包名称,例如
root@ubuntu-1804:~# apt-get install -y mongodb-org=6.0.0 mongodb-org-database=6.0.0 mongodb-org-server=6.0.0 mongodb-org-mongos=6.0.4 mongodb-org-tools=6.0.0
# apt-get当更新版本可用时升级软件包。为防止意外升级,请固定包。
root@ubuntu-1804:~# echo "mongodb-org hold" | sudo dpkg --set-selections
root@ubuntu-1804:~# echo "mongodb-org-database hold" | sudo dpkg --set-selections
root@ubuntu-1804:~# echo "mongodb-org-server hold" | sudo dpkg --set-selections
root@ubuntu-1804:~# echo "mongodb-org-shell hold" | sudo dpkg --set-selections
root@ubuntu-1804:~# echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
root@ubuntu-1804:~# echo "mongodb-org-tools hold" | sudo dpkg --set-selections
=======================================================================================================================================================================

root@ubuntu-1804:~# mongod --version
db version v6.0.5
Build Info: {
    "version": "6.0.5",
    "gitVersion": "c9a99c120371d4d4c52cbb15dac34a36ce8d3b1d",
    "openSSLVersion": "OpenSSL 1.1.1  11 Sep 2018",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "ubuntu1804",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}

常用命令

本文介绍在
ArcGIS
下属的
ArcMap
软件中,
ArcGIS Editor for OpenStreetMap
这一工具集插件的下载与安装的具体方法。

ArcGIS Editor for OpenStreetMap

ArcMap
软件中的一个工具集,通过其可以实现基于
ArcGIS
相关软件直接下载
OpenStreetMap

OSM
)数据,并基于下载后的数据进行数据编辑、空间分析、数据修改与回传至
OSM
服务器等多项功能。

首先,我们进入
ArcGIS Editor for OpenStreetMap

GitHub
主页
,并依据自己的
ArcMap
软件版本进入不同的下载页面。当然,这里有一点需要注意:不知道为什么官方没有将
10.2.X
版本
ArcMap
对应的下载地址列出,如果大家需要
10.2.X
版本的,可以直接点击
这里下载
,这里也是这一插件的官方下载网站。

当然,无论是哪一个版本,其后续下载与安装操作都是一致的;本文以
10.7
版本为例进行介绍。

进入下载页面后,点击右上角的“
Download
”即可进行下载;建议大家在下载前阅读一下网站给出的“
Description
”信息。

这一工具集很小,下载很快;下载后解压,即可进行安装。此时可以看到解压后是有两个不同版本的工具集,大家依据上一幅图中所示的“
Description
”信息自行选择即可。一般的,选择下图中第一个,即
不带有
(64-bit)
字样的那一个进行安装即可,如下图所示。

安装时请注意,最好提前关闭
ArcGIS
下属全部软件。直接双击对应的
.exe
文件即可,会先出现一个正在运行的安装准备界面,稍等其完成准备工作,如下图所示。

随后,即可开始安装,如下图所示。

个人建议最好将安装地址选择在与对应
ArcGIS
软件安装地址一致的路径下,方便后期寻找,如下图所示。

稍等片刻即可完成安装。安装完成后会弹出一个网页,大家依据个人需要进行选择浏览即可,如下图所示。

此时,再打开
ArcMap
软件,可以看到
ArcGIS Editor for OpenStreetMap
工具集已经成功安装,如下图所示。

至此,大功告成。需要注意的是,本文仅介绍
ArcGIS Editor for OpenStreetMap
的下载与安装;具体这一工具集的详细操作将会在后续博客中进行介绍。