"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[4526],{3905:function(e,t,n){n.d(t,{Zo:function(){return l},kt:function(){return d}});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,i=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var c=r.createContext({}),m=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},l=function(e){var t=m(e.components);return r.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},p=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),p=m(n),d=i,f=p["".concat(c,".").concat(d)]||p[d]||u[d]||o;return n?r.createElement(f,a(a({ref:t},l),{},{components:n})):r.createElement(f,a({ref:t},l))}));function d(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=p;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:i,a[1]=s;for(var m=2;m<o;m++)a[m]=n[m];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}p.displayName="MDXCreateElement"},3921:function(e,t,n){n.r(t),n.d(t,{assets:function(){return l},contentTitle:function(){return c},default:function(){return d},frontMatter:function(){return s},metadata:function(){return m},toc:function(){return u}});var r=n(7462),i=n(3366),o=(n(7294),n(3905)),a=["components"],s={title:"Implementation Notes"},c=void 0,m={unversionedId:"designDocs/implementation-notes",id:"version-0.7.0/designDocs/implementation-notes",title:"Implementation Notes",description:"\x3c!--",source:"@site/versioned_docs/version-0.7.0/designDocs/implementation-notes.md",sourceDirName:"designDocs",slug:"/designDocs/implementation-notes",permalink:"/docs/designDocs/implementation-notes",editUrl:"https://github.com/apache/submarine/edit/master/website/versioned_docs/version-0.7.0/designDocs/implementation-notes.md",tags:[],version:"0.7.0",frontMatter:{title:"Implementation Notes"},sidebar:"docs",previous:{title:"Architecture and Requirment",permalink:"/docs/designDocs/architecture-and-requirements"},next:{title:"Environments Implementation",permalink:"/docs/designDocs/environments-implementation"}},l={},u=[],p={toc:u};function d(e){var t=e.components,n=(0,i.Z)(e,a);return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"Before digging into details of implementations, you should read ",(0,o.kt)("a",{parentName:"p",href:"/docs/designDocs/architecture-and-requirements"},"architecture-and-requirements")," first to understand overall requirements and architecture."),(0,o.kt)("p",null,"Here're sub topics of Submarine implementations:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/designDocs/storage-implementation"},"Submarine Storage"),": How to store metadata, logs, metrics, etc. of Submarine."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/designDocs/environments-implementation"},"Submarine Environment"),": How environments created, managed, stored in Submarine."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/designDocs/experiment-implementation"},"Submarine Experiment"),": How experiments managed, stored, and how the predefined experiment template works."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/designDocs/notebook-implementation"},"Submarine Notebook"),": How experiments managed, stored, and how the predefined experiment template works."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/designDocs/submarine-server/architecture"},"Submarine Server"),": How Submarine server is designed, architecture, implementation notes, etc.")),(0,o.kt)("p",null,"Working-in-progress designs, Below are designs which are working-in-progress, we will move them to the upper section once design & review is finished:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/designDocs/wip-designs/submarine-clusterServer"},"Submarine HA Design"),": How Submarine HA can be achieved, using RAFT, etc."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/designDocs/wip-designs/submarine-launcher"},"Submarine services deployment module:")," How to deploy submarine services to k8s or cloud.")))}d.isMDXComponent=!0}}]);