> 2021年05月11日信息消化 ### 其他阅读 #### 10个multi-tenant SaaS应用架构的最佳实践 [10 multi-tenant SaaS application architecture best practices](https://amitashwini.medium.com/10-multi-tenant-saas-application-architecture-best-practices-fa107d69c788) 1. Your SaaS application should be self-service 2. Personalization should be possible with your SaaS application 3. Your SaaS application should feature **multi-tenancy architecture** 4. SaaS application must be capable of **integration** 5. Your SaaS application should have operational performance 6. Your SaaS application should be secure and compliant with **industry standards and regulations** 7. Dedicate yourself to **monitoring** and maintaining the SaaS application 8. Achieve **application** **scalability** with your SaaS application 9. Achieve **database scalability** with your SaaS application #### How to Design a Modern Multi-tenant SaaS Application with Auth0 [How to Design a Modern Multi-tenant SaaS Application with Auth0](https://engineering.opsgenie.com/how-to-design-a-modern-multi-tenant-saas-application-with-auth0-45c446e825b7) we wanted to - Have a multi-tenant architecture to separate groups of users - Support username-password based sign ups and logins - Support SSO based sign ups and logins with Google, maybe LinkedIn and GitHub next - Built a REST API that can be consumed by different client applications such as a SPA (Single Page Application) or a mobile app client. ![img](https://raw.githubusercontent.com/Phalacrocorax/memo-image-host/master/uPic/1*AArwBDwpcTyVBb3tfIdIuA.png) 从高层次的角度来看,我们的应用程序由一个基于React.js的SPA和REST API组成。这些应用程序运行在不同的服务器上。因此,SPA向API发出Ajax请求以访问用户的资源。所有用户相关的数据都存储在Auth0中。我们不在数据库中保留任何用户相关的信息,如姓名、密码、角色。将所有数据保存在应用程序之外意味着如果我们想验证用户或获得用户列表,我们需要向Auth0发出请求。 > From a high level perspective, our application consists of a React.js based SPA and REST API. These applications run on different servers. Thus, SPA makes Ajax requests to API to access user’s resources. All user related data is stored in Auth0. We don’t keep any user related info such as names, passwords, roles in our database. Keeping all data outside of the application means that if we want to authenticate users or get the list of users, we need to make requests to Auth0. ##### Setup in Auth0 Auth0有诸如客户端、API、连接、规则等概念。在这篇博文中,我不会去讨论这些细节。我只会在下面的章节中分享我们架构中相关部分的设置细节。如果你想了解更多关于这些Auth0的概念,请查看这些文档。 > Auth0 has concepts like clients, APIs, connections, rules, etc. I won’t go into the details of these in this blog post. I will just share the setup details of the relevant parts of our architecture in the following sections. Check out [these docs](https://auth0.com/docs/overview) if you want to learn more about these Auth0 concepts. ![img](https://raw.githubusercontent.com/Phalacrocorax/memo-image-host/master/uPic/0*WbZIgjxPxRGDiLLo..png) ##### 1. APIs ![img](https://raw.githubusercontent.com/Phalacrocorax/memo-image-host/master/uPic/1*zwKv0LtjCozeBMTHCsFBPQ.png) ###### 1.1. Auth0 Management API Auth0会自动创建这个API。我们将使用Auth0管理API来访问和修改我们在Auth0中的所有配置,以及我们的用户相关数据。 > Auth0 automatically creates this API. We will use Auth0 Management API to access and modify all our configuration in Auth0 as well as our user related data. ###### **1.2. Local API** 本地API是我们在Auth0中的REST APIs定义。这里有几件事你需要注意。 > Local API is our REST APIs definition in Auth0. Couple of things you need to be careful about here: - Identifier (the *audience*) param cannot be changed later so be careful about it. You can use *localhost:8080* for your local Spring boot app development by default. - Enable `*Allow Skipping User Consent*` option in our case. The reason for this is explained later in the post under *Important Points* title. - In our case, we don’t need scope based access for now. If you do, go ahead and modify the scopes. - Don’t forget to authorize *Spring Boot Server App* Client from *Non Interactive Clients* tab. Single Page and Native apps do not require further configuration. ##### 2. Clients 在Auth0的设置中,我们将使用两个客户端。React SPA是代表我们的React.js应用程序的客户端,而Spring Boot Server App Client是我们用来从Spring Boot应用程序向Auth0 Management API发出请求的客户端。 > There are two clients we will use in our setup in Auth0. React SPA is the one representing our React.js application while Spring Boot Server App Client is the one that we will use to make requests to Auth0 Management API from our Spring Boot App. ![img](https://raw.githubusercontent.com/Phalacrocorax/memo-image-host/master/uPic/0*dWO7wSIessk8-Lu5..png) #### 加入一家创业公司之前要考虑什么? https://blog.csdn.net/asqi1/article/details/41820807 选择比能力更重要。 > 如果你是第一次创业,做一个小而美的项目涨涨经验值也蛮好的。不过一个小而美的项目到了后期有可能变成鸡肋,它既没有被市场证明不行迅速死掉,也没有爆发性的增长,这种项目最悲剧。当你已经能以一个合伙人或者总监级别加入一个创业团队的时候,我相信你已经工作了一些年数了,在自己的领域有了一些成绩了,这时候你的时间机会成本是很高的。所以你自己一个厉害的人去做一件小事,不如和几个厉害的人一起做成一件大事。要知道,Facebook前100名工程师的收入比99%的创业者高。在中国,现在的情况是,人人都去创业。可是五个很厉害的人原本可以做成一个几十亿美元的公司,他们都自己去创了五个公司,结果都死了。 **你不可能卖出自己都不会买的东西。** > 友盟的前cofounder文一和我说,你在一个创业公司里具体做什么不重要,离CEO的距离有多近才重要。这也是有人曾经告诉过Sheryl Sandberg的,“If you’re offered a seat on a rocket ship, get on, don’t ask what seat.” > > > 不过,当你问“我来这个创业公司做什么”,如果对方说的是“你什么都可以做”,那么你千万不要加入。因为CEO很可能自己都没有想清楚你来了之后具体要做什么。而没有明确的职责和权力,你会处处碰壁。 和靠谱的人一起,不管做什么,都不会太不靠谱。 > 好点子不重要,重要的是这个好点子谁来做。 > > 我意识到自己的问题是总想迅速做决定。可是要找到一个合适的合伙人真的急不得。 > > 我在见每一个创始人之前依然做了很多额外的功课:我会问天使投资人和VC对这个行业的评价,我不仅问投了这个公司的投资人,我还会问没有投这个公司的投资人;我会和这家公司的竞品公司的CEO或高管聊聊;我会问问那些已经离开这家公司的人对这家公司的看法;我也会问科技财经媒体的记者对这个创始人的感受。 > > 创业的失败率是极其高的,所以最好是和连续创业者一起创业,他们在过去的失败中能获得一些经验。如果团队里的人是第一次创业,那么你要设想的是,如果这一次失败的话,我是否愿意和他们再做另一个项目。 > > 最后在我加入原麦山丘时,Alan和我说,因为我和他们的基因太不同,所以他最不希望看到的就是两件事,一是我被他们同化,另一个是我被他们排挤出去。有个典故叫“三年不参左”。清朝时,左宗棠去边疆打战,朝廷上很多人趁此说左的坏话,慈禧太后为了免他的后顾之忧,和朝中大臣们说三年之内不准参左宗棠的奏折说他的坏话。Alan也和团队里的所有人说,“三年不参左,半年之内不准你们任何人challenge Ying。” 但是比性格更重要的是,每个人到底要什么。 > 我们的运营负责人特别注重细节。他会盯着看每一个市场活动是否每一个步骤都计划好。我们主厨接受一个媒体采访他也会很紧张,担心他说的每一句话。我之前觉得不解,直到有一天他忽然和我说,Ying,我都四十多了,原麦山丘就是我最后一家公司了,要是失败了我就只能回台湾乡下种田了。所以他不允许任何人犯任何一个错。但是,我们的CTO就异常淡定,公司里发生什么好事他也不激动,公司里发生什么坏事他也不忧虑。他说,我已经创业了太多次了,一个公司只有两个关键时间点,一个是被市场证明,另一个是井喷。这两个点把握住了,只要不犯什么特别大的错误,其它都没有什么关系。 比数字更重要的是这个公司股权结构是否清晰。 > 公司融资到了哪一轮了?融了多少钱? > > 我们看报道会经常看见很多互联网公司动不动就是融个几千万美元,估值几亿美元的。其实有很多公司公布的估值和融资数字除以3-6才是真实数字。一些公司都直接把融到金额的单位从人民币换成美元,甚至有的公司都开始乘以10倍的报数了... > > 有的创业公司70%的股份都是天使投资人的...还有的创业公司有10个平均股东...公司发展得越大,股权结构带来的问题就会越明显。 > > 也不能从一个公司是否有很多天使或VC抢来决定是否加入它。有的创始人在还没有做出一个成形的产品的时候就能靠刷脸拿到第一笔天使投资,这也是能力。拿到天使投资是加分项,但是依然有太多不确定因素。VC呢,有时候投的也是趋势,当一个领域热起来的时候,VC们从战略考虑必须得占一个坑。 > > 不管怎么样,投资投的永远是概率。而且他们投入的是钱,而经常还不是自己的钱,是基金的钱。可是作为一个创业者,你要加入一个创业公司,投入的可是时间啊! **时间比钱贵多了。** 选择永远比能力更重要。 另外一个v2ex的讨论:[被邀加入创业团队,有什么需要注意的吗?](https://www.v2ex.com/t/201744) > 4.股权。如果项目有很牛逼的投资,比如天使轮,甚至AB轮都拿到了,那你为啥不是挣得更多?如果经营者觉得项目能做得很成功,那么他应该很珍惜股权,因为他自己看来股权比给你的工资值钱多了。如果你是真为了项目前景,自己已经不在乎工资是一万五还是三万的时候,那股权才是应该吸引你的地方。**如果是一个还在努力做demo争取天使争取A轮的公司,那期权就是废纸**……相信我 AWS Cognito + API Gateway [Create dynamic designs with auto layout](https://help.figma.com/hc/en-us/articles/360040451373-Create-dynamic-designs-with-Auto-Layout) [Stack on a budget (Free Tier Driven Development FTDD)](https://github.com/255kb/stack-on-a-budget) ### 一些收获 - Draw Half Circle By Block Arc https://docs.google.com/drawings/d/1peHrn5iKWJDXPCY-MWwyJX91Wz1uxmU6erTf2pb8HN0/edit ``` Basic Shapes >Block Arc Set Fill Transparent Adjust Right Yellow Point into line Right Click > Rotate Left 90 ``` ![image-20210512174622638](https://raw.githubusercontent.com/Phalacrocorax/memo-image-host/master/uPic/image-20210512174622638.png)