Why is your k8s application platform not easy to use?

InfoQ 2021-01-21 12:13:47
k8s application platform easy use


{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":" around K8s Common problems in building application platforms ","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#434343","name":"user"}}],"text":" Question 1 , User demands and Kubernetes API Gap between ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" Everybody knows Kubernetes The orientation of this project is “Platform for Platforms”, It provides a set of unified concepts and extensions , Shielding the underlying storage 、 The Internet 、 Implementation details of infrastructure such as computing , Make the Platform Builder based on K8s Can quickly build a scene ability / Come out of the platform . But this often makes the builders of these platforms fall into a misunderstanding , Put... Directly K8s The concept of the business is exposed to business users , It's called “ Native K8s Experience ”, The most direct problem is that users can't learn , Not willing to move to these “ advanced ” On our cloud native platform .","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/0d/0dc2b2b4f02705a849dbac2294279d6b.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" chart 1 Business and K8s The conceptual difference between ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" In fact, that's what platform builders need to solve . You can see the picture below 1, Business users care about the concept of application management , At the R & D level, it's code 、 Mirror image 、 application 、CI/CD Process, etc , and K8s The corresponding concept of is Pod、Deployment、CRD wait ; At the operation and maintenance level, it's a flexible strategy 、 Gray publishing strategy, etc , and K8s The corresponding concept is Ingress, MetricsPodAutoScaler wait ; At the level of user operation mode, it is GUI、CLI etc. , and K8s Is to write YAML file . There is no doubt that there are a lot of differences, which leads to a very difficult conceptual gap , R & D personnel need to spend a lot of time learning knowledge unrelated to business , This makes the business pressure even worse .","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" So a good platform to solve this problem , Usually in K8s On the basis of a layer of , Provide... For business scenarios “ Business can understand ” Concepts and services . But do it , There are two other problems .","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":" Question two , There are a lot of application platforms built for different scenarios “ barn ”","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" For larger companies, there will be “ barn ” problem , Because big companies have many lines of business , It's easy to form business platforms for different scenarios , Although we are all based on K8s Built , But there are different concepts and interfaces on it . Pictured 2 Shown , These different platforms are like one by one “ barn ”, User experience and technical issues remain . ","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/86/866b059624e6ae3ec5cd4070031a8d83.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" chart 2 Application platforms in different scenarios form a barn problem ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" In terms of user experience , It's OK with a single platform , But the actual needs of users are often not single . For example, a business user in “ Stateless application platform - A” A micro service is created here , And then I had to go “ Stateful application platform - B” Create a middleware , It makes users lack of uniformity in docking applications in different scenarios , Not to mention horizontal interaction .","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" On the technical , Platforms for different scenarios are based on K8s Build an independent capability module , It's easy to make wheels repeatedly , Each individual capability lacks horizontal reuse and portability , It leads to serious fragmentation , It's also very difficult to accumulate precipitation in technology , In essence, it is a waste of human resources .","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":" Question 3 , Based on the direct K8s structure PaaS Can't keep up with ecological development ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" For smaller companies , Although there is no “ barn ” problem , But build a PaaS Go cover it K8s It's not that “ Silver bullet ”. You can imagine , In order to K8s To transform the complex concepts into business concepts that users can understand , The conventional approach is to make a platform exclusive API, Through this layer API Do the conversion , As shown in the figure .","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/36/36717099f263fb46bd40b73aae341d36.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" chart 3 structure PaaS Cover up K8s problem ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" This floor API In the beginning, there was no problem , But with the growth of user demand , as well as K8s The rapid development of Ecology , This floor API It's going to be a bottleneck , The ecological ability to block the prosperity of platform users . This issue has become a consensus in the past two years , The result is that the platform builders are working hard to encapsulate API, In the end, it turns out that users have learned community K8s How to play a new function on the Internet , It's better to just K8s API Expose . And then a lot of platforms degenerate into direct exposure K8s API At this level , This goes back to the first question .","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" Build useful “K8s Application platform ” What's the core issue ?","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" After studying and observing a large number of open source and commercial application management products , We came to some interesting conclusions .","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":" Conclusion 1 : Abstraction can effectively reduce the threshold of learning and using the platform ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/c0/c0c32540650b9d61a6450fce0c306060.png","alt":null,"title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" chart 4 The degree of abstraction of different projects or products ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" Pictured 4 Shown , Typical in the industry ","attrs":{}},{"type":"link","attrs":{"href":"https://kubernetes.io/","title":null}},{"type":"link","attrs":{"href":"https://kubernetes.io/","title":null},"content":[{"type":"text","text":"Kubernetes","attrs":{}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"、","attrs":{}},{"type":"link","attrs":{"href":"https://knative.dev/","title":null},"content":[{"type":"text","text":"Knative","attrs":{}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"、","attrs":{}},{"type":"link","attrs":{"href":"https://rio.io/","title":null},"content":[{"type":"text","text":"Racher Rio","attrs":{}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" as well as ","attrs":{}},{"type":"link","attrs":{"href":"https://www.heroku.com/","title":null}},{"type":"link","attrs":{"href":"https://www.heroku.com/","title":null},"content":[{"type":"text","text":"Heroku","attrs":{}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" These four platforms, for example .","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" among ,Kubernetes The location is Platform for Platform, It only encapsulates the infrastructure to enable the platform team , No abstraction for end users . So industry consensus and best practices , It's all based on Kubernetes Do secondary development , At least a graphical interface has to be used for secondary encapsulation , Can be used by users . ad locum , We put Kubernetes As a benchmark of the lowest level of abstraction .","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Knative, Only for Serverless scene ( Function mode , Billing by traffic expansion , No state , Event driven ) Design . It's through its own CRD stay Kubernetes A layer of model limitation is made on the basis of , Restrict the entrance to Service/Route/Configuration/Event These are a few Serverless Unique concept , Thus in Kubernetes It provides Serverless Using experience of , Compared with Kubernetes Has greatly reduced the user's use of mind , but Knative Our positioning is still not for end users , It's about building Cloud Run It's designed for user oriented products .","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"RIO It's based on Kubernetes Realized PaaS, It provides a CLI, There will be a lot of bottom layers around application lifecycle management K8s The function of the packaging has become simple CLI command , Such as rio run Running on behalf of the application ,rio route Add an access route , The mental burden of using experience is more than Knative Much lower , Basically, it has returned to the level that business R & D personnel can understand .","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Heroku It's the best known in the industry PaaS, It's not built on Kubernetes above , But it began to be respected more than a decade ago “ Application centric ” Idea , Ease of use compared to RIO Further more . Its abstraction is also a well-known application (heroku apps), domain name (heroku domains), Release , User level concepts such as workflow , There is no need to learn these concepts , In the feedback of the whole industry ,Heroku The user experience is also benchmarking .","attrs":{}}]}],"attrs":{}}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" ","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":" Conclusion two : More abstract , The scalability of the platform and the recognition of the platform team are significantly reduced ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" ","attrs":{}}]},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/71/71fa0119e01a6238c76fa8230984711a.png","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" chart 5 The higher the abstraction, the worse the scalability ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" Pictured 5 Shown , Just now we saw four platforms that are more abstract and easier to use , There are also significant differences in scalability .","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" Again , Still take Kubernetes As a benchmark , It doesn't provide user layer abstraction , Naturally, it is a tool positioning for platform oriented team , adopt CRD + Controller To expand in a different way .","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Knative Although it's also allowing users to operate K8s, But because its model is limited to a few conceptual objects , So you can do it behind the scenes Controller Expand , But the extended fields can only be limited to the original Knative On the model object of , It can only be done by adding annotation( It's like tagging and commenting ) The way to workaround. So ,Knative As Serverless The platform building tools in this scenario still have some scalability , But to serve a wider range of scenarios , Next to impossible .","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"RIO Our positioning is based on K8s Of “Micro PaaS”, It doesn't give a solution in scalability , That is to say, in addition to adding functions by modifying the code , We can't find any other way to expand .","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":"Heroku As a classic PaaS, I have defined a series of specifications to provide extensibility , At the same time, it created its own plug-in ecosystem . But this ecology is compared to Kubernetes Today's Ecology , Just completely “ Isn't worth mentioning ” 了 . so to speak ,Heroku Scalability of , It is an important reason that it finally fades out from the mainstream platform , Interested friends can read the author's previous article ","attrs":{}},{"type":"link","attrs":{"href":"https://www.infoq.cn/article/zhbbauekoowfk3skvahu","title":null},"content":[{"type":"text","text":"《Heroku Gain and loss of 》","attrs":{}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":".","attrs":{}}]}],"attrs":{}}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" overall , More abstract , The better the end user experience , But the less scalable the platform is , The less likely it is to be adopted by the platform team , That explains today Kubernetes The adoption of , Is much higher than Heroku.","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" ","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" The standardization model of abstraction and application itself is indispensable ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" So is it to put K8s Object retention for , Make abstractions by building templates , Then the user only needs to fill in the values that the template needs to render \b, It's easy to use ? That's not the answer ,","attrs":{}},{"type":"link","attrs":{"href":"https://helm.sh/","title":null},"content":[{"type":"text","text":"Helm","attrs":{}}]},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" It's a typical example of this model . although helm It's also very popular , But its problems also exist :","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong","attrs":{}}],"text":" ","attrs":{}}]},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" State reflow :helm After distributing the object , There is no unified state backflow mechanism . for instance , You put Deployment and Service Assemble into one helm After the application is installed , that Deployment and Service Is it successful , There are no errors in these States ,helm You can't see these details directly , You have to sink again K8s In these concepts . Especially when these objects are not K8s Built in objects , This problem is even more obvious .","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" register 、 Find out 、 conflict management : In addition to the ability to use around expansion , Registration of capabilities is just as important as discovery . How to make users self-service registration and discover the ability of platform layer , And which of these capabilities are complementary 、 What are the conflicts , It's also a problem that application management needs to solve . and helm Positioning is essentially a packaged deployment tool , I didn't think about it .","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" Publishing and versioning : although helm There is also the concept of version , Also have upgrade command , But familiar with helm My friend must know helm The upgrade of is actually against the release principle , Because it doesn't have any grayscale at all , Instead, they just use the new version instead of the old one . A production level application management platform must be a stable and reliable platform with rich release strategies .","attrs":{}}]}],"attrs":{}},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" General capacity building : In addition to Publishing , In fact, there are many other capabilities that are universal , Like elastic expansion and contraction 、 Access routing 、 Log monitoring and so on , These generic capabilities revolve around helm It's also hard to build models .","attrs":{}}]}],"attrs":{}}],"attrs":{}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"heading","attrs":{"align":null,"level":1},"content":[{"type":"text","text":" answer ","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"KubeCon NA Officially released ","attrs":{}},{"type":"link","attrs":{"href":"https://mp.weixin.qq.com/s/LauydAy1ngcDuZ3lhqrL6Q","title":""},"content":[{"type":"text","text":"KubeVela","attrs":{}}]},{"type":"text","text":" project (github Address :http://kubevela.io/)","attrs":{}},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":" It is based on the exploration of these questions that we get the answer ,","attrs":{}},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}},{"type":"strong","attrs":{}}],"text":" An easy to use and highly scalable application management platform and core engine ","attrs":{}},{"type":"text","marks":[{"type":"color","attrs":{"color":"#494949","name":"user"}}],"text":".","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://javamana.com/2021/01/20210121121128442d.html

  1. 【计算机网络 12(1),尚学堂马士兵Java视频教程
  2. 【程序猿历程,史上最全的Java面试题集锦在这里
  3. 【程序猿历程(1),Javaweb视频教程百度云
  4. Notes on MySQL 45 lectures (1-7)
  5. [computer network 12 (1), Shang Xuetang Ma soldier java video tutorial
  6. The most complete collection of Java interview questions in history is here
  7. [process of program ape (1), JavaWeb video tutorial, baidu cloud
  8. Notes on MySQL 45 lectures (1-7)
  9. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  10. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  11. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件
  12. Refined spring boot 03: spring boot configuration files and configuration management, and reading configuration files in three ways
  13. 【递归,Java传智播客笔记
  14. [recursion, Java intelligence podcast notes
  15. [adhere to painting for 386 days] the beginning of spring of 24 solar terms
  16. K8S系列第八篇(Service、EndPoints以及高可用kubeadm部署)
  17. K8s Series Part 8 (service, endpoints and high availability kubeadm deployment)
  18. 【重识 HTML (3),350道Java面试真题分享
  19. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  20. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  21. [re recognize HTML (3) and share 350 real Java interview questions
  22. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  23. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  24. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  25. RPC 1: how to develop RPC framework from scratch
  26. 造轮子系列之RPC 1:如何从零开始开发RPC框架
  27. RPC 1: how to develop RPC framework from scratch
  28. 一次性捋清楚吧,对乱糟糟的,Spring事务扩展机制
  29. 一文彻底弄懂如何选择抽象类还是接口,连续四年百度Java岗必问面试题
  30. Redis常用命令
  31. 一双拖鞋引发的血案,狂神说Java系列笔记
  32. 一、mysql基础安装
  33. 一位程序员的独白:尽管我一生坎坷,Java框架面试基础
  34. Clear it all at once. For the messy, spring transaction extension mechanism
  35. A thorough understanding of how to choose abstract classes or interfaces, baidu Java post must ask interview questions for four consecutive years
  36. Redis common commands
  37. A pair of slippers triggered the murder, crazy God said java series notes
  38. 1、 MySQL basic installation
  39. Monologue of a programmer: despite my ups and downs in my life, Java framework is the foundation of interview
  40. 【大厂面试】三面三问Spring循环依赖,请一定要把这篇看完(建议收藏)
  41. 一线互联网企业中,springboot入门项目
  42. 一篇文带你入门SSM框架Spring开发,帮你快速拿Offer
  43. 【面试资料】Java全集、微服务、大数据、数据结构与算法、机器学习知识最全总结,283页pdf
  44. 【leetcode刷题】24.数组中重复的数字——Java版
  45. 【leetcode刷题】23.对称二叉树——Java版
  46. 【leetcode刷题】22.二叉树的中序遍历——Java版
  47. 【leetcode刷题】21.三数之和——Java版
  48. 【leetcode刷题】20.最长回文子串——Java版
  49. 【leetcode刷题】19.回文链表——Java版
  50. 【leetcode刷题】18.反转链表——Java版
  51. 【leetcode刷题】17.相交链表——Java&python版
  52. 【leetcode刷题】16.环形链表——Java版
  53. 【leetcode刷题】15.汉明距离——Java版
  54. 【leetcode刷题】14.找到所有数组中消失的数字——Java版
  55. 【leetcode刷题】13.比特位计数——Java版
  56. oracle控制用户权限命令
  57. 三年Java开发,继阿里,鲁班二期Java架构师
  58. Oracle必须要启动的服务
  59. 万字长文!深入剖析HashMap,Java基础笔试题大全带答案
  60. 一问Kafka就心慌?我却凭着这份,图灵学院vip课程百度云