Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation
This project
Loading...
Sign in
潘建波
/
星河大数据平台
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit a05fa1ef
authored
Apr 29, 2020
by
潘建波
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
繁星文档
0 parents
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
998 additions
and
0 deletions
fanxing.html
fanxing.md
fanxing.html
0 → 100644
View file @
a05fa1e
<!doctype html>
<html>
<head>
<meta
charset=
'UTF-8'
><meta
name=
'viewport'
content=
'width=device-width initial-scale=1'
>
<title>
fanxing
</title><link
href=
'https://fonts.loli.net/css?family=PT+Serif:400,400italic,700,700italic&subset=latin,cyrillic-ext,cyrillic,latin-ext'
rel=
'stylesheet'
type=
'text/css'
/><style
type=
'text/css'
>html
{
overflow-x
:
initial
!important
;}
:root
{
--node-fill
:
#ECECFF
;
--node-border
:
#CCCCFF
;
--cluster-fill
:
#ffffde
;
--cluster-border
:
#aaaa33
;
--note-fill
:
#fff5ad
;
--note-border
:
#aaaa33
;
--mermaid-color
:
var
(
--text-color
);
}
.label
{
font-family
:
var
(
--mermaid-font-family
);
color
:
rgb
(
51
,
51
,
51
);
}
.label
text
{
fill
:
rgb
(
51
,
51
,
51
);
}
.node
rect
,
.node
circle
,
.node
ellipse
,
.node
polygon
{
fill
:
var
(
--node-fill
);
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1px
;
}
.node
.label
{
text-align
:
center
;
}
.node.clickable
{
cursor
:
pointer
;
}
.arrowheadPath
{
fill
:
var
(
--text-color
);
}
.edgePath
.path
{
stroke
:
var
(
--text-color
);
stroke-width
:
1.5px
;
}
.edgeLabel
{
background-color
:
rgb
(
232
,
232
,
232
);
text-align
:
center
;
}
.cluster
rect
{
fill
:
var
(
--cluster-fill
);
stroke
:
var
(
--cluster-border
);
stroke-width
:
1px
;
}
.cluster
text
{
fill
:
var
(
--text-color
);
}
div
.mermaidTooltip
{
position
:
absolute
;
text-align
:
center
;
max-width
:
200px
;
padding
:
2px
;
font-family
:
var
(
--mermaid-font-family
);
font-size
:
12px
;
background
:
var
(
--cluster-fill
);
border
:
1px
solid
var
(
--cluster-border
);
border-radius
:
2px
;
pointer-events
:
none
;
z-index
:
100
;
}
.actor
{
stroke
:
var
(
--node-border
);
fill
:
var
(
--node-fill
);
}
text
.actor
{
fill
:
black
;
stroke
:
none
;
}
.actor-line
{
stroke
:
grey
;
}
.messageLine0
{
stroke-width
:
1.5
;
stroke
:
var
(
--text-color
);
}
.messageLine1
{
stroke-width
:
1.5
;
stroke
:
var
(
--text-color
);
}
#arrowhead
{
fill
:
var
(
--text-color
);
}
.sequenceNumber
{
fill
:
white
;
}
#sequencenumber
{
fill
:
var
(
--text-color
);
}
#crosshead
path
{
fill
:
var
(
--text-color
)
!important
;
stroke
:
var
(
--text-color
)
!important
;
}
.messageText
{
fill
:
var
(
--text-color
);
stroke
:
none
;
}
.labelBox
{
stroke
:
var
(
--node-border
);
fill
:
var
(
--node-fill
);
}
.labelText
{
fill
:
black
;
stroke
:
none
;
}
.loopText
{
fill
:
black
;
stroke
:
none
;
}
.loopLine
{
stroke-width
:
2
;
stroke
:
var
(
--node-border
);
}
.note
{
stroke
:
var
(
--cluster-border
);
fill
:
rgb
(
255
,
245
,
173
);
}
.noteText
{
fill
:
black
;
stroke
:
none
;
font-family
:
var
(
--mermaid-font-family
);
font-size
:
14px
;
}
.activation0
{
fill
:
rgb
(
244
,
244
,
244
);
stroke
:
rgb
(
102
,
102
,
102
);
}
.activation1
{
fill
:
rgb
(
244
,
244
,
244
);
stroke
:
rgb
(
102
,
102
,
102
);
}
.activation2
{
fill
:
rgb
(
244
,
244
,
244
);
stroke
:
rgb
(
102
,
102
,
102
);
}
.mermaid-main-font
{
font-family
:
var
(
--mermaid-font-family
);
}
.section
{
stroke
:
none
;
opacity
:
0.2
;
}
.section0
{
fill
:
rgba
(
102
,
102
,
255
,
0.49
);
}
.section2
{
fill
:
rgb
(
255
,
244
,
0
);
}
.section1
,
.section3
{
fill
:
white
;
opacity
:
0.2
;
}
.sectionTitle0
{
fill
:
var
(
--text-color
);
}
.sectionTitle1
{
fill
:
var
(
--text-color
);
}
.sectionTitle2
{
fill
:
var
(
--text-color
);
}
.sectionTitle3
{
fill
:
var
(
--text-color
);
}
.sectionTitle
{
text-anchor
:
start
;
font-size
:
11px
;
font-family
:
var
(
--mermaid-font-family
);
}
.grid
.tick
{
stroke
:
lightgrey
;
opacity
:
0.3
;
shape-rendering
:
crispedges
;
}
.grid
.tick
text
{
font-family
:
var
(
--mermaid-font-family
);
}
.grid
path
{
stroke-width
:
0
;
}
.today
{
fill
:
none
;
stroke
:
red
;
stroke-width
:
2px
;
}
.task
{
stroke-width
:
2
;
}
.taskText
{
text-anchor
:
middle
;
font-family
:
var
(
--mermaid-font-family
);
}
.taskText
:not
([
font-size
])
{
font-size
:
11px
;
}
.taskTextOutsideRight
{
fill
:
black
;
text-anchor
:
start
;
font-size
:
11px
;
font-family
:
var
(
--mermaid-font-family
);
}
.taskTextOutsideLeft
{
fill
:
black
;
text-anchor
:
end
;
font-size
:
11px
;
}
.task.clickable
{
cursor
:
pointer
;
}
.taskText.clickable
{
cursor
:
pointer
;
font-weight
:
bold
;
fill
:
rgb
(
0
,
49
,
99
)
!important
;
}
.taskTextOutsideLeft.clickable
{
cursor
:
pointer
;
font-weight
:
bold
;
fill
:
rgb
(
0
,
49
,
99
)
!important
;
}
.taskTextOutsideRight.clickable
{
cursor
:
pointer
;
font-weight
:
bold
;
fill
:
rgb
(
0
,
49
,
99
)
!important
;
}
.taskText0
,
.taskText1
,
.taskText2
,
.taskText3
{
fill
:
white
;
}
.task0
,
.task1
,
.task2
,
.task3
{
fill
:
rgb
(
138
,
144
,
221
);
stroke
:
rgb
(
83
,
79
,
188
);
}
.taskTextOutside0
,
.taskTextOutside2
{
fill
:
black
;
}
.taskTextOutside1
,
.taskTextOutside3
{
fill
:
black
;
}
.active0
,
.active1
,
.active2
,
.active3
{
fill
:
rgb
(
191
,
199
,
255
);
stroke
:
rgb
(
83
,
79
,
188
);
}
.activeText0
,
.activeText1
,
.activeText2
,
.activeText3
{
fill
:
black
!important
;
}
.done0
,
.done1
,
.done2
,
.done3
{
stroke
:
grey
;
fill
:
lightgrey
;
stroke-width
:
2
;
}
.doneText0
,
.doneText1
,
.doneText2
,
.doneText3
{
fill
:
black
!important
;
}
.crit0
,
.crit1
,
.crit2
,
.crit3
{
stroke
:
rgb
(
255
,
136
,
136
);
fill
:
red
;
stroke-width
:
2
;
}
.activeCrit0
,
.activeCrit1
,
.activeCrit2
,
.activeCrit3
{
stroke
:
rgb
(
255
,
136
,
136
);
fill
:
rgb
(
191
,
199
,
255
);
stroke-width
:
2
;
}
.doneCrit0
,
.doneCrit1
,
.doneCrit2
,
.doneCrit3
{
stroke
:
rgb
(
255
,
136
,
136
);
fill
:
lightgrey
;
stroke-width
:
2
;
cursor
:
pointer
;
shape-rendering
:
crispedges
;
}
.milestone
{
transform
:
rotate
(
45deg
)
scale
(
0.8
,
0.8
);
}
.milestoneText
{
font-style
:
italic
;
}
.doneCritText0
,
.doneCritText1
,
.doneCritText2
,
.doneCritText3
{
fill
:
black
!important
;
}
.activeCritText0
,
.activeCritText1
,
.activeCritText2
,
.activeCritText3
{
fill
:
black
!important
;
}
.titleText
{
text-anchor
:
middle
;
font-size
:
18px
;
fill
:
black
;
font-family
:
var
(
--mermaid-font-family
);
}
g
.classGroup
text
{
fill
:
rgb
(
147
,
112
,
219
);
stroke
:
none
;
font-family
:
var
(
--mermaid-font-family
);
font-size
:
10px
;
}
g
.classGroup
text
.title
{
font-weight
:
bolder
;
}
g
.classGroup
rect
{
fill
:
var
(
--node-fill
);
stroke
:
rgb
(
147
,
112
,
219
);
}
g
.classGroup
line
{
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1
;
}
.classLabel
.box
{
stroke
:
none
;
stroke-width
:
0
;
fill
:
var
(
--node-fill
);
opacity
:
0.5
;
}
.classLabel
.label
{
fill
:
rgb
(
147
,
112
,
219
);
font-size
:
10px
;
}
.relation
{
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1
;
fill
:
none
;
}
#compositionStart
{
fill
:
rgb
(
147
,
112
,
219
);
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1
;
}
#compositionEnd
{
fill
:
rgb
(
147
,
112
,
219
);
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1
;
}
#aggregationStart
{
fill
:
var
(
--node-fill
);
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1
;
}
#aggregationEnd
{
fill
:
var
(
--node-fill
);
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1
;
}
#dependencyStart
{
fill
:
rgb
(
147
,
112
,
219
);
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1
;
}
#dependencyEnd
{
fill
:
rgb
(
147
,
112
,
219
);
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1
;
}
#extensionStart
{
fill
:
rgb
(
147
,
112
,
219
);
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1
;
}
#extensionEnd
{
fill
:
rgb
(
147
,
112
,
219
);
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1
;
}
.commit-id
,
.commit-msg
,
.branch-label
{
fill
:
lightgrey
;
color
:
lightgrey
;
font-family
:
var
(
--mermaid-font-family
);
}
.pieTitleText
{
text-anchor
:
middle
;
font-size
:
25px
;
fill
:
var
(
--text-color
);
font-family
:
var
(
--mermaid-font-family
);
}
.slice
{
font-family
:
var
(
--mermaid-font-family
);
}
g
.stateGroup
text
{
fill
:
rgb
(
147
,
112
,
219
);
stroke
:
none
;
font-size
:
10px
;
font-family
:
var
(
--mermaid-font-family
);
}
g
.stateGroup
text
{
fill
:
rgb
(
147
,
112
,
219
);
stroke
:
none
;
font-size
:
10px
;
}
g
.stateGroup
.state-title
{
font-weight
:
bolder
;
fill
:
black
;
}
g
.stateGroup
rect
{
fill
:
var
(
--node-fill
);
stroke
:
rgb
(
147
,
112
,
219
);
}
g
.stateGroup
line
{
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1
;
}
.transition
{
stroke
:
rgb
(
147
,
112
,
219
);
stroke-width
:
1
;
fill
:
none
;
}
.stateGroup
.composit
{
fill
:
white
;
border-bottom
:
1px
;
}
.state-note
{
stroke
:
var
(
--cluster-border
);
fill
:
rgb
(
255
,
245
,
173
);
}
.state-note
text
{
fill
:
black
;
stroke
:
none
;
font-size
:
10px
;
}
.stateLabel
.box
{
stroke
:
none
;
stroke-width
:
0
;
fill
:
var
(
--node-fill
);
opacity
:
0.5
;
}
.stateLabel
text
{
fill
:
black
;
font-size
:
10px
;
font-weight
:
bold
;
font-family
:
var
(
--mermaid-font-family
);
}
.node
text
{
font-size
:
14px
;
}
div
.mermaidTooltip
{
position
:
absolute
;
text-align
:
center
;
max-width
:
200px
;
padding
:
2px
;
font-family
:
var
(
--mermaid-font-family
);
font-size
:
12px
;
background
:
var
(
--cluster-fill
);
border
:
1px
solid
var
(
--cluster-border
);
border-radius
:
2px
;
pointer-events
:
none
;
z-index
:
100
;
}
#write
.md-diagram-panel
.md-diagram-panel-preview
div
{
width
:
initial
;
}
:root
{
--bg-color
:
#ffffff
;
--text-color
:
#333333
;
--select-text-bg-color
:
#B5D6FC
;
--select-text-font-color
:
auto
;
--monospace
:
"Lucida Console"
,
Consolas
,
"Courier"
,
monospace
;
}
html
{
font-size
:
14px
;
background-color
:
var
(
--bg-color
);
color
:
var
(
--text-color
);
font-family
:
"Helvetica Neue"
,
Helvetica
,
Arial
,
sans-serif
;
-webkit-font-smoothing
:
antialiased
;
}
body
{
margin
:
0px
;
padding
:
0px
;
height
:
auto
;
bottom
:
0px
;
top
:
0px
;
left
:
0px
;
right
:
0px
;
font-size
:
1rem
;
line-height
:
1.42857
;
overflow-x
:
hidden
;
background
:
inherit
;
tab-size
:
4
;
}
iframe
{
margin
:
auto
;
}
a
.url
{
word-break
:
break-all
;
}
a
:active
,
a
:hover
{
outline
:
0px
;
}
.in-text-selection
,
::selection
{
text-shadow
:
none
;
background
:
var
(
--select-text-bg-color
);
color
:
var
(
--select-text-font-color
);
}
#write
{
margin
:
0px
auto
;
height
:
auto
;
width
:
inherit
;
word-break
:
normal
;
overflow-wrap
:
break-word
;
position
:
relative
;
white-space
:
normal
;
overflow-x
:
visible
;
padding-top
:
40px
;
}
#write
.first-line-indent
p
{
text-indent
:
2em
;
}
#write
.first-line-indent
li
p
,
#write
.first-line-indent
p
*
{
text-indent
:
0px
;
}
#write
.first-line-indent
li
{
margin-left
:
2em
;
}
.for-image
#write
{
padding-left
:
8px
;
padding-right
:
8px
;
}
body
.typora-export
{
padding-left
:
30px
;
padding-right
:
30px
;
}
.typora-export
.footnote-line
,
.typora-export
li
,
.typora-export
p
{
white-space
:
pre-wrap
;
}
@media
screen
and
(
max-width
:
500px
)
{
body
.typora-export
{
padding-left
:
0px
;
padding-right
:
0px
;
}
#write
{
padding-left
:
20px
;
padding-right
:
20px
;
}
.CodeMirror-sizer
{
margin-left
:
0px
!important
;
}
.CodeMirror-gutters
{
display
:
none
!important
;
}
}
#write
li
>
figure
:last-child
{
margin-bottom
:
0.5rem
;
}
#write
ol
,
#write
ul
{
position
:
relative
;
}
img
{
max-width
:
100%
;
vertical-align
:
middle
;
}
button
,
input
,
select
,
textarea
{
color
:
inherit
;
font
:
inherit
;
}
input
[
type
=
"checkbox"
],
input
[
type
=
"radio"
]
{
line-height
:
normal
;
padding
:
0px
;
}
*,
::after
,
::before
{
box-sizing
:
border-box
;
}
#write
h1
,
#write
h2
,
#write
h3
,
#write
h4
,
#write
h5
,
#write
h6
,
#write
p
,
#write
pre
{
width
:
inherit
;
}
#write
h1
,
#write
h2
,
#write
h3
,
#write
h4
,
#write
h5
,
#write
h6
,
#write
p
{
position
:
relative
;
}
p
{
line-height
:
inherit
;
}
h1
,
h2
,
h3
,
h4
,
h5
,
h6
{
break-after
:
avoid-page
;
break-inside
:
avoid
;
orphans
:
2
;
}
p
{
orphans
:
4
;
}
h1
{
font-size
:
2rem
;
}
h2
{
font-size
:
1.8rem
;
}
h3
{
font-size
:
1.6rem
;
}
h4
{
font-size
:
1.4rem
;
}
h5
{
font-size
:
1.2rem
;
}
h6
{
font-size
:
1rem
;
}
.md-math-block
,
.md-rawblock
,
h1
,
h2
,
h3
,
h4
,
h5
,
h6
,
p
{
margin-top
:
1rem
;
margin-bottom
:
1rem
;
}
.hidden
{
display
:
none
;
}
.md-blockmeta
{
color
:
rgb
(
204
,
204
,
204
);
font-weight
:
700
;
font-style
:
italic
;
}
a
{
cursor
:
pointer
;
}
sup
.md-footnote
{
padding
:
2px
4px
;
background-color
:
rgba
(
238
,
238
,
238
,
0.7
);
color
:
rgb
(
85
,
85
,
85
);
border-radius
:
4px
;
cursor
:
pointer
;
}
sup
.md-footnote
a
,
sup
.md-footnote
a
:hover
{
color
:
inherit
;
text-transform
:
inherit
;
text-decoration
:
inherit
;
}
#write
input
[
type
=
"checkbox"
]
{
cursor
:
pointer
;
width
:
inherit
;
height
:
inherit
;
}
figure
{
overflow-x
:
auto
;
margin
:
1.2em
0px
;
max-width
:
calc
(
100%
+
16px
);
padding
:
0px
;
}
figure
>
table
{
margin
:
0px
!important
;
}
tr
{
break-inside
:
avoid
;
break-after
:
auto
;
}
thead
{
display
:
table-header-group
;
}
table
{
border-collapse
:
collapse
;
border-spacing
:
0px
;
width
:
100%
;
overflow
:
auto
;
break-inside
:
auto
;
text-align
:
left
;
}
table
.md-table
td
{
min-width
:
32px
;
}
.CodeMirror-gutters
{
border-right
:
0px
;
background-color
:
inherit
;
}
.CodeMirror-linenumber
{
user-select
:
none
;
}
.CodeMirror
{
text-align
:
left
;
}
.CodeMirror-placeholder
{
opacity
:
0.3
;
}
.CodeMirror
pre
{
padding
:
0px
4px
;
}
.CodeMirror-lines
{
padding
:
0px
;
}
div
.hr
:focus
{
cursor
:
none
;
}
#write
pre
{
white-space
:
pre-wrap
;
}
#write
.fences-no-line-wrapping
pre
{
white-space
:
pre
;
}
#write
pre
.ty-contain-cm
{
white-space
:
normal
;
}
.CodeMirror-gutters
{
margin-right
:
4px
;
}
.md-fences
{
font-size
:
0.9rem
;
display
:
block
;
break-inside
:
avoid
;
text-align
:
left
;
overflow
:
visible
;
white-space
:
pre
;
background
:
inherit
;
position
:
relative
!important
;
}
.md-diagram-panel
{
width
:
100%
;
margin-top
:
10px
;
text-align
:
center
;
padding-top
:
0px
;
padding-bottom
:
8px
;
overflow-x
:
auto
;
}
#write
.md-fences.mock-cm
{
white-space
:
pre-wrap
;
}
.md-fences.md-fences-with-lineno
{
padding-left
:
0px
;
}
#write
.fences-no-line-wrapping
.md-fences.mock-cm
{
white-space
:
pre
;
overflow-x
:
auto
;
}
.md-fences.mock-cm.md-fences-with-lineno
{
padding-left
:
8px
;
}
.CodeMirror-line
,
twitterwidget
{
break-inside
:
avoid
;
}
.footnotes
{
opacity
:
0.8
;
font-size
:
0.9rem
;
margin-top
:
1em
;
margin-bottom
:
1em
;
}
.footnotes
+
.footnotes
{
margin-top
:
0px
;
}
.md-reset
{
margin
:
0px
;
padding
:
0px
;
border
:
0px
;
outline
:
0px
;
vertical-align
:
top
;
background
:
0px
0px
;
text-decoration
:
none
;
text-shadow
:
none
;
float
:
none
;
position
:
static
;
width
:
auto
;
height
:
auto
;
white-space
:
nowrap
;
cursor
:
inherit
;
-webkit-tap-highlight-color
:
transparent
;
line-height
:
normal
;
font-weight
:
400
;
text-align
:
left
;
box-sizing
:
content-box
;
direction
:
ltr
;
}
li
div
{
padding-top
:
0px
;
}
blockquote
{
margin
:
1rem
0px
;
}
li
.mathjax-block
,
li
p
{
margin
:
0.5rem
0px
;
}
li
{
margin
:
0px
;
position
:
relative
;
}
blockquote
>
:last-child
{
margin-bottom
:
0px
;
}
blockquote
>
:first-child
,
li
>
:first-child
{
margin-top
:
0px
;
}
.footnotes-area
{
color
:
rgb
(
136
,
136
,
136
);
margin-top
:
0.714rem
;
padding-bottom
:
0.143rem
;
white-space
:
normal
;
}
#write
.footnote-line
{
white-space
:
pre-wrap
;
}
@media
print
{
body
,
html
{
border
:
1px
solid
transparent
;
height
:
99%
;
break-after
:
avoid
;
break-before
:
avoid
;
}
#write
{
margin-top
:
0px
;
padding-top
:
0px
;
border-color
:
transparent
!important
;
}
.typora-export
*
{
-webkit-print-color-adjust
:
exact
;
}
html
.blink-to-pdf
{
font-size
:
13px
;
}
.typora-export
#write
{
padding-left
:
32px
;
padding-right
:
32px
;
padding-bottom
:
0px
;
break-after
:
avoid
;
}
.typora-export
#write
::after
{
height
:
0px
;
}
}
.footnote-line
{
margin-top
:
0.714em
;
font-size
:
0.7em
;
}
a
img
,
img
a
{
cursor
:
pointer
;
}
pre
.md-meta-block
{
font-size
:
0.8rem
;
min-height
:
0.8rem
;
white-space
:
pre-wrap
;
background
:
rgb
(
204
,
204
,
204
);
display
:
block
;
overflow-x
:
hidden
;
}
p
>
.md-image
:only-child:not
(
.md-img-error
)
img
,
p
>
img
:only-child
{
display
:
block
;
margin
:
auto
;
}
p
>
.md-image
:only-child
{
display
:
inline-block
;
width
:
100%
;
}
#write
.MathJax_Display
{
margin
:
0.8em
0px
0px
;
}
.md-math-block
{
width
:
100%
;
}
.md-math-block
:not
(
:empty
)
::after
{
display
:
none
;
}
[
contenteditable
=
"true"
]
:active
,
[
contenteditable
=
"true"
]
:focus
,
[
contenteditable
=
"false"
]
:active
,
[
contenteditable
=
"false"
]
:focus
{
outline
:
0px
;
box-shadow
:
none
;
}
.md-task-list-item
{
position
:
relative
;
list-style-type
:
none
;
}
.task-list-item.md-task-list-item
{
padding-left
:
0px
;
}
.md-task-list-item
>
input
{
position
:
absolute
;
top
:
0px
;
left
:
0px
;
margin-left
:
-1.2em
;
margin-top
:
calc
(
1em
-
10px
);
border
:
none
;
}
.math
{
font-size
:
1rem
;
}
.md-toc
{
min-height
:
3.58rem
;
position
:
relative
;
font-size
:
0.9rem
;
border-radius
:
10px
;
}
.md-toc-content
{
position
:
relative
;
margin-left
:
0px
;
}
.md-toc-content
::after
,
.md-toc
::after
{
display
:
none
;
}
.md-toc-item
{
display
:
block
;
color
:
rgb
(
65
,
131
,
196
);
}
.md-toc-item
a
{
text-decoration
:
none
;
}
.md-toc-inner
:hover
{
text-decoration
:
underline
;
}
.md-toc-inner
{
display
:
inline-block
;
cursor
:
pointer
;
}
.md-toc-h1
.md-toc-inner
{
margin-left
:
0px
;
font-weight
:
700
;
}
.md-toc-h2
.md-toc-inner
{
margin-left
:
2em
;
}
.md-toc-h3
.md-toc-inner
{
margin-left
:
4em
;
}
.md-toc-h4
.md-toc-inner
{
margin-left
:
6em
;
}
.md-toc-h5
.md-toc-inner
{
margin-left
:
8em
;
}
.md-toc-h6
.md-toc-inner
{
margin-left
:
10em
;
}
@media
screen
and
(
max-width
:
48em
)
{
.md-toc-h3
.md-toc-inner
{
margin-left
:
3.5em
;
}
.md-toc-h4
.md-toc-inner
{
margin-left
:
5em
;
}
.md-toc-h5
.md-toc-inner
{
margin-left
:
6.5em
;
}
.md-toc-h6
.md-toc-inner
{
margin-left
:
8em
;
}
}
a
.md-toc-inner
{
font-size
:
inherit
;
font-style
:
inherit
;
font-weight
:
inherit
;
line-height
:
inherit
;
}
.footnote-line
a
:not
(
.reversefootnote
)
{
color
:
inherit
;
}
.md-attr
{
display
:
none
;
}
.md-fn-count
::after
{
content
:
"."
;
}
code
,
pre
,
samp
,
tt
{
font-family
:
var
(
--monospace
);
}
kbd
{
margin
:
0px
0.1em
;
padding
:
0.1em
0.6em
;
font-size
:
0.8em
;
color
:
rgb
(
36
,
39
,
41
);
background
:
rgb
(
255
,
255
,
255
);
border
:
1px
solid
rgb
(
173
,
179
,
185
);
border-radius
:
3px
;
box-shadow
:
rgba
(
12
,
13
,
14
,
0.2
)
0px
1px
0px
,
rgb
(
255
,
255
,
255
)
0px
0px
0px
2px
inset
;
white-space
:
nowrap
;
vertical-align
:
middle
;
}
.md-comment
{
color
:
rgb
(
162
,
127
,
3
);
opacity
:
0.8
;
font-family
:
var
(
--monospace
);
}
code
{
text-align
:
left
;
vertical-align
:
initial
;
}
a
.md-print-anchor
{
white-space
:
pre
!important
;
border-width
:
initial
!important
;
border-style
:
none
!important
;
border-color
:
initial
!important
;
display
:
inline-block
!important
;
position
:
absolute
!important
;
width
:
1px
!important
;
right
:
0px
!important
;
outline
:
0px
!important
;
background
:
0px
0px
!important
;
text-decoration
:
initial
!important
;
text-shadow
:
initial
!important
;
}
.md-inline-math
.MathJax_SVG
.noError
{
display
:
none
!important
;
}
.html-for-mac
.inline-math-svg
.MathJax_SVG
{
vertical-align
:
0.2px
;
}
.md-math-block
.MathJax_SVG_Display
{
text-align
:
center
;
margin
:
0px
;
position
:
relative
;
text-indent
:
0px
;
max-width
:
none
;
max-height
:
none
;
min-height
:
0px
;
min-width
:
100%
;
width
:
auto
;
overflow-y
:
hidden
;
display
:
block
!important
;
}
.MathJax_SVG_Display
,
.md-inline-math
.MathJax_SVG_Display
{
width
:
auto
;
margin
:
inherit
;
display
:
inline-block
!important
;
}
.MathJax_SVG
.MJX-monospace
{
font-family
:
var
(
--monospace
);
}
.MathJax_SVG
.MJX-sans-serif
{
font-family
:
sans-serif
;
}
.MathJax_SVG
{
display
:
inline
;
font-style
:
normal
;
font-weight
:
400
;
line-height
:
normal
;
zoom
:
90%
;
text-indent
:
0px
;
text-align
:
left
;
text-transform
:
none
;
letter-spacing
:
normal
;
word-spacing
:
normal
;
overflow-wrap
:
normal
;
white-space
:
nowrap
;
float
:
none
;
direction
:
ltr
;
max-width
:
none
;
max-height
:
none
;
min-width
:
0px
;
min-height
:
0px
;
border
:
0px
;
padding
:
0px
;
margin
:
0px
;
}
.MathJax_SVG
*
{
transition
:
none
0s
ease
0s
;
}
.MathJax_SVG_Display
svg
{
vertical-align
:
middle
!important
;
margin-bottom
:
0px
!important
;
margin-top
:
0px
!important
;
}
.os-windows.monocolor-emoji
.md-emoji
{
font-family
:
"Segoe UI Symbol"
,
sans-serif
;
}
.md-diagram-panel
>
svg
{
max-width
:
100%
;
}
[
lang
=
"flow"
]
svg
,
[
lang
=
"mermaid"
]
svg
{
max-width
:
100%
;
height
:
auto
;
}
[
lang
=
"mermaid"
]
.node
text
{
font-size
:
1rem
;
}
table
tr
th
{
border-bottom
:
0px
;
}
video
{
max-width
:
100%
;
display
:
block
;
margin
:
0px
auto
;
}
iframe
{
max-width
:
100%
;
width
:
100%
;
border
:
none
;
}
.highlight
td
,
.highlight
tr
{
border
:
0px
;
}
svg
[
id
^=
"mermaidChart"
]
{
line-height
:
1em
;
}
mark
{
background
:
rgb
(
255
,
255
,
0
);
color
:
rgb
(
0
,
0
,
0
);
}
.md-html-inline
.md-plain
,
.md-html-inline
strong
,
mark
.md-inline-math
,
mark
strong
{
color
:
inherit
;
}
mark
.md-meta
{
color
:
rgb
(
0
,
0
,
0
);
opacity
:
0.3
!important
;
}
.CodeMirror
{
height
:
auto
;
}
.CodeMirror.cm-s-inner
{
background
:
inherit
;
}
.CodeMirror-scroll
{
overflow
:
auto
hidden
;
z-index
:
3
;
}
.CodeMirror-gutter-filler
,
.CodeMirror-scrollbar-filler
{
background-color
:
rgb
(
255
,
255
,
255
);
}
.CodeMirror-gutters
{
border-right
:
1px
solid
rgb
(
221
,
221
,
221
);
background
:
inherit
;
white-space
:
nowrap
;
}
.CodeMirror-linenumber
{
padding
:
0px
3px
0px
5px
;
text-align
:
right
;
color
:
rgb
(
153
,
153
,
153
);
}
.cm-s-inner
.cm-keyword
{
color
:
rgb
(
119
,
0
,
136
);
}
.cm-s-inner
.cm-atom
,
.cm-s-inner.cm-atom
{
color
:
rgb
(
34
,
17
,
153
);
}
.cm-s-inner
.cm-number
{
color
:
rgb
(
17
,
102
,
68
);
}
.cm-s-inner
.cm-def
{
color
:
rgb
(
0
,
0
,
255
);
}
.cm-s-inner
.cm-variable
{
color
:
rgb
(
0
,
0
,
0
);
}
.cm-s-inner
.cm-variable-2
{
color
:
rgb
(
0
,
85
,
170
);
}
.cm-s-inner
.cm-variable-3
{
color
:
rgb
(
0
,
136
,
85
);
}
.cm-s-inner
.cm-string
{
color
:
rgb
(
170
,
17
,
17
);
}
.cm-s-inner
.cm-property
{
color
:
rgb
(
0
,
0
,
0
);
}
.cm-s-inner
.cm-operator
{
color
:
rgb
(
152
,
26
,
26
);
}
.cm-s-inner
.cm-comment
,
.cm-s-inner.cm-comment
{
color
:
rgb
(
170
,
85
,
0
);
}
.cm-s-inner
.cm-string-2
{
color
:
rgb
(
255
,
85
,
0
);
}
.cm-s-inner
.cm-meta
{
color
:
rgb
(
85
,
85
,
85
);
}
.cm-s-inner
.cm-qualifier
{
color
:
rgb
(
85
,
85
,
85
);
}
.cm-s-inner
.cm-builtin
{
color
:
rgb
(
51
,
0
,
170
);
}
.cm-s-inner
.cm-bracket
{
color
:
rgb
(
153
,
153
,
119
);
}
.cm-s-inner
.cm-tag
{
color
:
rgb
(
17
,
119
,
0
);
}
.cm-s-inner
.cm-attribute
{
color
:
rgb
(
0
,
0
,
204
);
}
.cm-s-inner
.cm-header
,
.cm-s-inner.cm-header
{
color
:
rgb
(
0
,
0
,
255
);
}
.cm-s-inner
.cm-quote
,
.cm-s-inner.cm-quote
{
color
:
rgb
(
0
,
153
,
0
);
}
.cm-s-inner
.cm-hr
,
.cm-s-inner.cm-hr
{
color
:
rgb
(
153
,
153
,
153
);
}
.cm-s-inner
.cm-link
,
.cm-s-inner.cm-link
{
color
:
rgb
(
0
,
0
,
204
);
}
.cm-negative
{
color
:
rgb
(
221
,
68
,
68
);
}
.cm-positive
{
color
:
rgb
(
34
,
153
,
34
);
}
.cm-header
,
.cm-strong
{
font-weight
:
700
;
}
.cm-del
{
text-decoration
:
line-through
;
}
.cm-em
{
font-style
:
italic
;
}
.cm-link
{
text-decoration
:
underline
;
}
.cm-error
{
color
:
red
;
}
.cm-invalidchar
{
color
:
red
;
}
.cm-constant
{
color
:
rgb
(
38
,
139
,
210
);
}
.cm-defined
{
color
:
rgb
(
181
,
137
,
0
);
}
div
.CodeMirror
span
.CodeMirror-matchingbracket
{
color
:
rgb
(
0
,
255
,
0
);
}
div
.CodeMirror
span
.CodeMirror-nonmatchingbracket
{
color
:
rgb
(
255
,
34
,
34
);
}
.cm-s-inner
.CodeMirror-activeline-background
{
background
:
inherit
;
}
.CodeMirror
{
position
:
relative
;
overflow
:
hidden
;
}
.CodeMirror-scroll
{
height
:
100%
;
outline
:
0px
;
position
:
relative
;
box-sizing
:
content-box
;
background
:
inherit
;
}
.CodeMirror-sizer
{
position
:
relative
;
}
.CodeMirror-gutter-filler
,
.CodeMirror-hscrollbar
,
.CodeMirror-scrollbar-filler
,
.CodeMirror-vscrollbar
{
position
:
absolute
;
z-index
:
6
;
display
:
none
;
}
.CodeMirror-vscrollbar
{
right
:
0px
;
top
:
0px
;
overflow
:
hidden
;
}
.CodeMirror-hscrollbar
{
bottom
:
0px
;
left
:
0px
;
overflow
:
hidden
;
}
.CodeMirror-scrollbar-filler
{
right
:
0px
;
bottom
:
0px
;
}
.CodeMirror-gutter-filler
{
left
:
0px
;
bottom
:
0px
;
}
.CodeMirror-gutters
{
position
:
absolute
;
left
:
0px
;
top
:
0px
;
padding-bottom
:
30px
;
z-index
:
3
;
}
.CodeMirror-gutter
{
white-space
:
normal
;
height
:
100%
;
box-sizing
:
content-box
;
padding-bottom
:
30px
;
margin-bottom
:
-32px
;
display
:
inline-block
;
}
.CodeMirror-gutter-wrapper
{
position
:
absolute
;
z-index
:
4
;
background
:
0px
0px
!important
;
border
:
none
!important
;
}
.CodeMirror-gutter-background
{
position
:
absolute
;
top
:
0px
;
bottom
:
0px
;
z-index
:
4
;
}
.CodeMirror-gutter-elt
{
position
:
absolute
;
cursor
:
default
;
z-index
:
4
;
}
.CodeMirror-lines
{
cursor
:
text
;
}
.CodeMirror
pre
{
border-radius
:
0px
;
border-width
:
0px
;
background
:
0px
0px
;
font-family
:
inherit
;
font-size
:
inherit
;
margin
:
0px
;
white-space
:
pre
;
overflow-wrap
:
normal
;
color
:
inherit
;
z-index
:
2
;
position
:
relative
;
overflow
:
visible
;
}
.CodeMirror-wrap
pre
{
overflow-wrap
:
break-word
;
white-space
:
pre-wrap
;
word-break
:
normal
;
}
.CodeMirror-code
pre
{
border-right
:
30px
solid
transparent
;
width
:
fit-content
;
}
.CodeMirror-wrap
.CodeMirror-code
pre
{
border-right
:
none
;
width
:
auto
;
}
.CodeMirror-linebackground
{
position
:
absolute
;
left
:
0px
;
right
:
0px
;
top
:
0px
;
bottom
:
0px
;
z-index
:
0
;
}
.CodeMirror-linewidget
{
position
:
relative
;
z-index
:
2
;
overflow
:
auto
;
}
.CodeMirror-wrap
.CodeMirror-scroll
{
overflow-x
:
hidden
;
}
.CodeMirror-measure
{
position
:
absolute
;
width
:
100%
;
height
:
0px
;
overflow
:
hidden
;
visibility
:
hidden
;
}
.CodeMirror-measure
pre
{
position
:
static
;
}
.CodeMirror
div
.CodeMirror-cursor
{
position
:
absolute
;
visibility
:
hidden
;
border-right
:
none
;
width
:
0px
;
}
.CodeMirror
div
.CodeMirror-cursor
{
visibility
:
hidden
;
}
.CodeMirror-focused
div
.CodeMirror-cursor
{
visibility
:
inherit
;
}
.cm-searching
{
background
:
rgba
(
255
,
255
,
0
,
0.4
);
}
@media
print
{
.CodeMirror
div
.CodeMirror-cursor
{
visibility
:
hidden
;
}
}
/* meyer reset -- http://meyerweb.com/eric/tools/css/reset/ , v2.0 | 20110126 | License: none (public domain) */
@include-when-export
url(https://fonts.loli.net/css?family=PT+Serif:400,400italic,700,700italic&subset=latin,cyrillic-ext,cyrillic,latin-ext)
;
/* =========== */
:root
{
--active-file-bg-color
:
#dadada
;
--active-file-bg-color
:
rgba
(
32
,
43
,
51
,
0.63
);
--active-file-text-color
:
white
;
--bg-color
:
#f3f2ee
;
--text-color
:
#1f0909
;
--control-text-color
:
#444
;
--rawblock-edit-panel-bd
:
#e5e5e5
;
--select-text-bg-color
:
rgba
(
32
,
43
,
51
,
0.63
);
--select-text-font-color
:
white
;
}
pre
{
--select-text-bg-color
:
#36284e
;
--select-text-font-color
:
#fff
;
}
html
{
font-size
:
16px
;
}
html
,
body
{
background-color
:
#f3f2ee
;
font-family
:
"PT Serif"
,
'Times New Roman'
,
Times
,
serif
;
color
:
#1f0909
;
line-height
:
1.5em
;
}
/*#write {
overflow-x: auto;
max-width: initial;
padding-left: calc(50% - 17em);
padding-right: calc(50% - 17em);
}
@media (max-width: 36em) {
#write {
padding-left: 1em;
padding-right: 1em;
}
}*/
#write
{
max-width
:
40em
;
}
ol
li
{
list-style-type
:
decimal
;
list-style-position
:
outside
;
}
ul
li
{
list-style-type
:
disc
;
list-style-position
:
outside
;
}
ol
,
ul
{
list-style
:
none
;
}
blockquote
,
q
{
quotes
:
none
;
}
blockquote
:before
,
blockquote
:after
,
q
:before
,
q
:after
{
content
:
''
;
content
:
none
;
}
table
{
border-collapse
:
collapse
;
border-spacing
:
0
;
}
/* styles */
/* ====== */
/* headings */
h1
,
h2
,
h3
,
h4
,
h5
,
h6
{
font-weight
:
bold
;
}
h1
{
font-size
:
1.875em
;
/*30 / 16*/
line-height
:
1.6em
;
/* 48 / 30*/
margin-top
:
2em
;
}
h2
,
h3
{
font-size
:
1.3125em
;
/*21 / 16*/
line-height
:
1.15
;
/*24 / 21*/
margin-top
:
2.285714em
;
/*48 / 21*/
margin-bottom
:
1.15em
;
/*24 / 21*/
}
h3
{
font-weight
:
normal
;
}
h4
{
font-size
:
1.125em
;
/*18 / 16*/
margin-top
:
2.67em
;
/*48 / 18*/
}
h5
,
h6
{
font-size
:
1em
;
/*16*/
}
h1
{
border-bottom
:
1px
solid
;
margin-bottom
:
1.875em
;
padding-bottom
:
0.8125em
;
}
/* links */
a
{
text-decoration
:
none
;
color
:
#065588
;
}
a
:hover
,
a
:active
{
text-decoration
:
underline
;
}
/* block spacing */
p
,
blockquote
,
.md-fences
{
margin-bottom
:
1.5em
;
}
h1
,
h2
,
h3
,
h4
,
h5
,
h6
{
margin-bottom
:
1.5em
;
}
/* blockquote */
blockquote
{
font-style
:
italic
;
border-left
:
5px
solid
;
margin-left
:
2em
;
padding-left
:
1em
;
}
/* lists */
ul
,
ol
{
margin
:
0
0
1.5em
1.5em
;
}
/* tables */
.md-meta
,
.md-before
,
.md-after
{
color
:
#999
;
}
table
{
margin-bottom
:
1.5em
;
/*24 / 16*/
font-size
:
1em
;
/* width: 100%; */
}
thead
th
,
tfoot
th
{
padding
:
.25em
.25em
.25em
.4em
;
text-transform
:
uppercase
;
}
th
{
text-align
:
left
;
}
td
{
vertical-align
:
top
;
padding
:
.25em
.25em
.25em
.4em
;
}
code
,
.md-fences
{
background-color
:
#dadada
;
}
code
{
padding-left
:
2px
;
padding-right
:
2px
;
}
.md-fences
{
margin-left
:
2em
;
margin-bottom
:
3em
;
padding-left
:
1ch
;
padding-right
:
1ch
;
}
pre
,
code
,
tt
{
font-size
:
.875em
;
line-height
:
1.714285em
;
}
/* some fixes */
h1
{
line-height
:
1.3em
;
font-weight
:
normal
;
margin-bottom
:
0.5em
;
}
p
+
ul
,
p
+
ol
{
margin-top
:
.5em
;
}
h3
+
ul
,
h4
+
ul
,
h5
+
ul
,
h6
+
ul
,
h3
+
ol
,
h4
+
ol
,
h5
+
ol
,
h6
+
ol
{
margin-top
:
.5em
;
}
li
>
ul
,
li
>
ol
{
margin-top
:
inherit
;
margin-bottom
:
0
;
}
li
ol
>
li
{
list-style-type
:
lower-alpha
;
}
li
li
ol
>
li
{
list-style-type
:
lower-roman
;
}
h2
,
h3
{
margin-bottom
:
.75em
;
}
hr
{
border-top
:
none
;
border-right
:
none
;
border-bottom
:
1px
solid
;
border-left
:
none
;
}
h1
{
border-color
:
#c5c5c5
;
}
blockquote
{
border-color
:
#bababa
;
color
:
#656565
;
}
blockquote
ul
,
blockquote
ol
{
margin-left
:
0
;
}
.ty-table-edit
{
background-color
:
transparent
;
}
thead
{
background-color
:
#dadada
;
}
tr
:nth-child
(
even
)
{
background
:
#e8e7e7
;
}
hr
{
border-color
:
#c5c5c5
;
}
.task-list
{
padding-left
:
1rem
;
}
.md-task-list-item
{
padding-left
:
1.5rem
;
list-style-type
:
none
;
}
.md-task-list-item
>
input
:before
{
content
:
'\221A'
;
display
:
inline-block
;
width
:
1.25rem
;
height
:
1.6rem
;
vertical-align
:
middle
;
text-align
:
center
;
color
:
#ddd
;
background-color
:
#F3F2EE
;
}
.md-task-list-item
>
input
:checked:before
,
.md-task-list-item
>
input
[
checked
]
:before
{
color
:
inherit
;
}
#write
pre
.md-meta-block
{
min-height
:
1.875rem
;
color
:
#555
;
border
:
0px
;
background
:
transparent
;
margin-top
:
-4px
;
margin-left
:
1em
;
margin-top
:
1em
;
}
.md-image
>
.md-meta
{
color
:
#9B5146
;
}
.md-image
>
.md-meta
{
font-family
:
Menlo
,
'Ubuntu Mono'
,
Consolas
,
'Courier New'
,
'Microsoft Yahei'
,
'Hiragino Sans GB'
,
'WenQuanYi Micro Hei'
,
serif
;
}
#write
>
h3
.md-focus
:before
{
left
:
-1.5rem
;
color
:
#999
;
border-color
:
#999
;
}
#write
>
h4
.md-focus
:before
{
left
:
-1.5rem
;
top
:
.25rem
;
color
:
#999
;
border-color
:
#999
;
}
#write
>
h5
.md-focus
:before
{
left
:
-1.5rem
;
top
:
.0.3125rem
;
color
:
#999
;
border-color
:
#999
;
}
#write
>
h6
.md-focus
:before
{
left
:
-1.5rem
;
top
:
0.3125rem
;
color
:
#999
;
border-color
:
#999
;
}
.md-toc
:focus
.md-toc-content
{
margin-top
:
19px
;
}
.md-toc-content
:empty:before
{
color
:
#065588
;
}
.md-toc-item
{
color
:
#065588
;
}
#write
div
.md-toc-tooltip
{
background-color
:
#f3f2ee
;
}
#typora-sidebar
{
background-color
:
#f3f2ee
;
-webkit-box-shadow
:
0
6px
12px
rgba
(
0
,
0
,
0
,
0.375
);
box-shadow
:
0
6px
12px
rgba
(
0
,
0
,
0
,
0.375
);
}
.pin-outline
#typora-sidebar
{
background
:
inherit
;
box-shadow
:
none
;
border-right
:
1px
dashed
;
}
.pin-outline
#typora-sidebar
:hover
.outline-title-wrapper
{
border-left
:
1px
dashed
;
}
.outline-item
:hover
{
background-color
:
#dadada
;
border-left
:
28px
solid
#dadada
;
border-right
:
18px
solid
#dadada
;
}
.typora-node
.outline-item
:hover
{
border-right
:
28px
solid
#dadada
;
}
.outline-expander
:before
{
content
:
"\f0da"
;
font-family
:
FontAwesome
;
font-size
:
14px
;
top
:
1px
;
}
.outline-expander
:hover:before
,
.outline-item-open
>
.outline-item
>
.outline-expander
:before
{
content
:
"\f0d7"
;
}
.modal-content
{
background-color
:
#f3f2ee
;
}
.auto-suggest-container
ul
li
{
list-style-type
:
none
;
}
/** UI for electron */
.megamenu-menu
,
#top-titlebar
,
#top-titlebar
*,
.megamenu-content
{
background
:
#f3f2ee
;
color
:
#1f0909
;
}
.megamenu-menu-header
{
border-bottom
:
1px
dashed
#202B33
;
}
.megamenu-menu
{
box-shadow
:
none
;
border-right
:
1px
dashed
;
}
header
,
.context-menu
,
.megamenu-content
,
footer
{
font-family
:
"PT Serif"
,
'Times New Roman'
,
Times
,
serif
;
color
:
#1f0909
;
}
#megamenu-back-btn
{
color
:
#1f0909
;
border-color
:
#1f0909
;
}
.megamenu-menu-header
#megamenu-menu-header-title
:before
{
color
:
#1f0909
;
}
.megamenu-menu-list
li
a
:hover
,
.megamenu-menu-list
li
a
.active
{
color
:
inherit
;
background-color
:
#e8e7df
;
}
.long-btn
:hover
{
background-color
:
#e8e7df
;
}
#recent-file-panel
tbody
tr
:nth-child
(
2n-1
)
{
background-color
:
transparent
!important
;
}
.megamenu-menu-panel
tbody
tr
:hover
td
:nth-child
(
2
)
{
color
:
inherit
;
}
.megamenu-menu-panel
.btn
{
background-color
:
#D2D1D1
;
}
.btn-default
{
background-color
:
transparent
;
}
.typora-sourceview-on
#toggle-sourceview-btn
,
.ty-show-word-count
#footer-word-count
{
background
:
#c7c5c5
;
}
#typora-quick-open
{
background-color
:
inherit
;
}
.md-diagram-panel
{
margin-top
:
8px
;
}
.file-list-item-file-name
{
font-weight
:
initial
;
}
.file-list-item-summary
{
opacity
:
1
;
}
.file-list-item
{
color
:
#777
;
}
.file-list-item.active
{
background-color
:
inherit
;
color
:
black
;
}
.ty-side-sort-btn.active
{
background-color
:
inherit
;
}
.file-list-item.active
.file-list-item-file-name
{
font-weight
:
bold
;
}
.file-list-item
{
opacity
:
1
!important
;
}
.file-library-node.active
>
.file-node-background
{
background-color
:
rgba
(
32
,
43
,
51
,
0.63
);
background-color
:
var
(
--active-file-bg-color
);
}
.file-tree-node.active
>
.file-node-content
{
color
:
white
;
color
:
var
(
--active-file-text-color
);
}
.md-task-list-item
>
input
{
margin-left
:
-1.7em
;
margin-top
:
calc
(
1rem
-
12px
);
}
input
{
border
:
1px
solid
#aaa
;
}
.megamenu-menu-header
#megamenu-menu-header-title
,
.megamenu-menu-header
:hover
,
.megamenu-menu-header
:focus
{
color
:
inherit
;
}
.dropdown-menu
.divider
{
border-color
:
#e5e5e5
;
}
/* https://github.com/typora/typora-issues/issues/2046 */
.os-windows-7
strong
,
.os-windows-7
strong
{
font-weight
:
760
;
}
.ty-preferences
.btn-default
{
background
:
transparent
;
}
.ty-preferences
.window-header
{
border-bottom
:
1px
dashed
#202B33
;
box-shadow
:
none
;
}
#sidebar-loading-template
,
#sidebar-loading-template
.file-list-item
{
color
:
#777
;
}
</style>
</head>
<body
class=
'typora-export os-windows'
>
<div
id=
'write'
class =
'is-node'
><h1><a
name=
"-繁星重构设计说明"
class=
"md-header-anchor"
></a><span>
繁星重构设计说明
</span></h1><ol
start=
''
><li><span>
在繁星1.0的设计过程中繁星通过Websocket和平台连接,繁星即是服务端接收客户端消息也是客户端向客户端发送消息。
</span></li></ol><div
class=
"md-diagram-panel"
><svg
id=
"mermaidChart0"
width=
"100%"
xmlns=
"http://www.w3.org/2000/svg"
style=
"max-width: 196.546875px;"
viewBox=
"0 0 196.546875 64.8125"
><style>
:root
{
--mermaid-font-family
:
sans-serif
}
:root
{
--mermaid-alt-font-family
:
sans-serif
}
</style><style></style><g
transform=
"translate(-12, -12)"
><g
class=
"output"
><g
class=
"clusters"
></g><g
class=
"edgePaths"
><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M67.84077196099358,37.58802299276347L102.8359375,27.40625L136.859375,36.187533359032145"
marker-end=
"url(#arrowhead11)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead11"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M136.859375,52.624966640967855L102.8359375,61.40625L67.84077196099358,51.22447700723653"
marker-end=
"url(#arrowhead12)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead12"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g></g><g
class=
"edgeLabels"
><g
class=
"edgeLabel"
transform=
"translate(102.8359375,27.40625)"
style=
"opacity: 1;"
><g
transform=
"translate(-9.0234375,-7)"
class=
"label"
><foreignObject
width=
"18.046875"
height=
"14"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span>
ws
</span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
"translate(102.8359375,61.40625)"
style=
"opacity: 1;"
><g
transform=
"translate(-9.0234375,-7)"
class=
"label"
><foreignObject
width=
"18.046875"
height=
"14"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span>
ws
</span></div></foreignObject></g></g></g><g
class=
"nodes"
><g
class=
"node"
id=
"yw"
transform=
"translate(44.40625,44.40625)"
style=
"opacity: 1;"
><circle
x=
"-24.40625"
y=
"-18"
r=
"24.40625"
style=
"fill:#ff99ff;stroke:#fff;color:#fff;"
></circle><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#fff;"
transform=
"translate(-14.40625,-8)"
><foreignObject
width=
"28.8125"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
运维
</div></foreignObject></g></g></g><g
class=
"node"
id=
"fx"
transform=
"translate(168.703125,44.40625)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-31.84375"
y=
"-18"
width=
"63.6875"
height=
"36"
style=
"fill:#33ffff;stroke:#fff;color:#333;"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#333;"
transform=
"translate(-21.84375,-8)"
><foreignObject
width=
"43.6875"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
dev_fx
</div></foreignObject></g></g></g></g></g></g></svg></div><h5><a
name=
"为了更好的解耦平台让繁星成为一个独立的服务存在利用中间件来实现解耦"
class=
"md-header-anchor"
></a><span>
为了更好的解耦平台让繁星成为一个独立的服务存在利用中间件来实现解耦
</span></h5><div
class=
"md-diagram-panel"
><svg
id=
"mermaidChart1"
width=
"100%"
xmlns=
"http://www.w3.org/2000/svg"
style=
"max-width: 285.09375px;"
viewBox=
"0 0 285.09375 64.8125"
><style>
:root
{
--mermaid-font-family
:
sans-serif
}
:root
{
--mermaid-alt-font-family
:
sans-serif
}
</style><style></style><g
transform=
"translate(-12, -12)"
><g
class=
"output"
><g
class=
"clusters"
></g><g
class=
"edgePaths"
><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M68.3274264248396,39.564519161322785L93.8125,34.40625L118.8125,39.096956537672234"
marker-end=
"url(#arrowhead28)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead28"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M175.40625,39.096956537672234L200.40625,34.40625L225.40625,38.80427089059923"
marker-end=
"url(#arrowhead29)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead29"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M225.40625,50.00822910940077L200.40625,54.40625L175.40625,49.715543462327766"
marker-end=
"url(#arrowhead30)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead30"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M118.8125,49.715543462327766L93.8125,54.40625L68.3274264248396,49.247980838677215"
marker-end=
"url(#arrowhead31)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead31"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g></g><g
class=
"edgeLabels"
><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g></g><g
class=
"nodes"
><g
class=
"node"
id=
"yw"
transform=
"translate(44.40625,44.40625)"
style=
"opacity: 1;"
><circle
x=
"-24.40625"
y=
"-18"
r=
"24.40625"
style=
"fill:#ff99ff;stroke:#fff;color:#fff;"
></circle><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#fff;"
transform=
"translate(-14.40625,-8)"
><foreignObject
width=
"28.8125"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
运维
</div></foreignObject></g></g></g><g
class=
"node"
id=
"k"
transform=
"translate(147.109375,44.40625)"
style=
"opacity: 1;"
><rect
rx=
"5"
ry=
"5"
x=
"-28.296875"
y=
"-18"
width=
"56.59375"
height=
"36"
style=
"fill:#ff3333;stroke:#fff;color:#fff;"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#fff;"
transform=
"translate(-18.296875,-8)"
><foreignObject
width=
"36.59375"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
kafka
</div></foreignObject></g></g></g><g
class=
"node"
id=
"fx"
transform=
"translate(257.25,44.40625)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-31.84375"
y=
"-18"
width=
"63.6875"
height=
"36"
style=
"fill:#33ffff;stroke:#fff;color:#333;"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#333;"
transform=
"translate(-21.84375,-8)"
><foreignObject
width=
"43.6875"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
dev_fx
</div></foreignObject></g></g></g></g></g></g></svg></div><h3><a
name=
"2-去除base64图片传输引入hdfs将base64转换成url发送给推送服务"
class=
"md-header-anchor"
></a><span>
2. 去除base64图片传输引入HDFS将base64转换成url发送给推送服务
</span></h3><div
class=
"md-diagram-panel"
><svg
id=
"mermaidChart2"
width=
"100%"
xmlns=
"http://www.w3.org/2000/svg"
style=
"max-width: 363.21875px;"
viewBox=
"0 0 363.21875 138"
><style>
:root
{
--mermaid-font-family
:
sans-serif
}
:root
{
--mermaid-alt-font-family
:
sans-serif
}
</style><style></style><g
transform=
"translate(-12, -12)"
><g
class=
"output"
><g
class=
"clusters"
></g><g
class=
"edgePaths"
><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M68.8125,81L108.2109375,81L147.609375,81"
marker-end=
"url(#arrowhead45)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead45"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M213.12300145348837,63L250.21875,38L282.4140625,38"
marker-end=
"url(#arrowhead46)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead46"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M213.12300145348837,99L250.21875,124L275.21875,124"
marker-end=
"url(#arrowhead47)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead47"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g></g><g
class=
"edgeLabels"
><g
class=
"edgeLabel"
transform=
"translate(108.2109375,81)"
style=
"opacity: 1;"
><g
transform=
"translate(-14.3984375,-7)"
class=
"label"
><foreignObject
width=
"28.796875"
height=
"14"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span>
http
</span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g></g><g
class=
"nodes"
><g
class=
"node"
id=
"yw"
transform=
"translate(44.40625,81)"
style=
"opacity: 1;"
><circle
x=
"-24.40625"
y=
"-18"
r=
"24.40625"
style=
"fill:#ff99ff;stroke:#fff;color:#fff;"
></circle><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#fff;"
transform=
"translate(-14.40625,-8)"
><foreignObject
width=
"28.8125"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
运维
</div></foreignObject></g></g></g><g
class=
"node"
id=
"resv"
transform=
"translate(186.4140625,81)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-38.8046875"
y=
"-18"
width=
"77.609375"
height=
"36"
style=
"fill:#ff3333;stroke:#fff;color:#fff;"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#fff;"
transform=
"translate(-28.8046875,-8)"
><foreignObject
width=
"57.609375"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
推送服务
</div></foreignObject></g></g></g><g
class=
"node"
id=
"store"
transform=
"translate(321.21875,38)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-38.8046875"
y=
"-18"
width=
"77.609375"
height=
"36"
style=
"fill:#33ffff;stroke:#fff;color:#333;"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#333;"
transform=
"translate(-28.8046875,-8)"
><foreignObject
width=
"57.609375"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
存储服务
</div></foreignObject></g></g></g><g
class=
"node"
id=
"other"
transform=
"translate(321.21875,124)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-46"
y=
"-18"
width=
"92"
height=
"36"
style=
"fill:#33ffff;stroke:#fff;color:#333;"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#333;"
transform=
"translate(-36,-8)"
><foreignObject
width=
"72"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
第三方服务
</div></foreignObject></g></g></g></g></g></g></svg></div><h3><a
name=
"3引入新的架构方式"
class=
"md-header-anchor"
></a><span>
3.引入新的架构方式
</span></h3><h4><a
name=
"1)采用spring-cloud-替代现有的微服务架构"
class=
"md-header-anchor"
></a><span>
(1)采用spring cloud 替代现有的微服务架构
</span></h4><h4><a
name=
"2)应用自带的gateway替换掉原来的配置服务"
class=
"md-header-anchor"
></a><span>
(2)应用自带的gateway替换掉原来的配置服务
</span></h4><h4><a
name=
"3)采用hdfs替换掉原有的图片服务"
class=
"md-header-anchor"
></a><span>
(3)采用HDFS替换掉原有的图片服务
</span></h4><h4><a
name=
"4)数据库由原来的postgres和mongodb合并到postgres解决大量数据查询mongodb查询速度过慢问题)"
class=
"md-header-anchor"
></a><span>
(4)数据库由原来的postgres和MongoDB合并到postgres(解决大量数据查询MongoDB查询速度过慢问题)
</span></h4><h2><a
name=
"整理后的结构图"
class=
"md-header-anchor"
></a><span>
整理后的结构图
</span></h2><div
class=
"md-diagram-panel"
><svg
id=
"mermaidChart3"
width=
"100%"
xmlns=
"http://www.w3.org/2000/svg"
style=
"max-width: 865.92578125px;"
viewBox=
"0 0 865.92578125 336.8125"
><style>
:root
{
--mermaid-font-family
:
sans-serif
}
:root
{
--mermaid-alt-font-family
:
sans-serif
}
</style><style></style><g
transform=
"translate(-12, -12)"
><g
class=
"output"
><g
class=
"clusters"
></g><g
class=
"edgePaths"
><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M570.94921875,56L570.94921875,81L570.94921875,112.40625"
marker-end=
"url(#arrowhead82)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead82"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M570.94921875,148.40625L570.94921875,179.8125L570.94921875,204.8125"
marker-end=
"url(#arrowhead83)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead83"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M570.94921875,240.8125L570.94921875,272.8125L570.94921875,304.8125"
marker-end=
"url(#arrowhead84)"
style=
"fill:none;stroke-width:2px;stroke-dasharray:3;"
></path><defs><marker
id=
"arrowhead84"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M609.75390625,237.72752011891177L701.03515625,272.8125L701.03515625,304.8125"
marker-end=
"url(#arrowhead85)"
style=
"fill:none;stroke-width:2px;stroke-dasharray:3;"
></path><defs><marker
id=
"arrowhead85"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M532.14453125,231.9899139906138L359.53515625,272.8125L331.50015625,304.8125"
marker-end=
"url(#arrowhead86)"
style=
"fill:none;stroke-width:2px;stroke-dasharray:3;"
></path><defs><marker
id=
"arrowhead86"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M547.97953125,240.8125L507.14453125,272.8125L466.30953125,304.8125"
marker-end=
"url(#arrowhead87)"
style=
"fill:none;stroke-width:2px;stroke-dasharray:3;"
></path><defs><marker
id=
"arrowhead87"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M609.75390625,230.2700100594559L831.12109375,272.8125L831.12109375,304.8125"
marker-end=
"url(#arrowhead88)"
style=
"fill:none;stroke-width:2px;stroke-dasharray:3;"
></path><defs><marker
id=
"arrowhead88"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M420.37015625,304.8125L379.53515625,272.8125L392.33515625,240.8125"
marker-end=
"url(#arrowhead89)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead89"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M371.23828125,214.47581227919923L253.58203125,179.8125L302.3331099154901,144.67638723225718"
marker-end=
"url(#arrowhead90)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead90"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M343.59279148486814,142.03097971864372L413.33984375,179.8125L405.3138626453488,204.8125"
marker-end=
"url(#arrowhead91)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead91"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M298.7707631898101,137.46880556372872L158.703125,179.8125L158.703125,204.8125"
marker-end=
"url(#arrowhead92)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead92"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M136.19609375,240.8125L96.18359375,272.8125L70.39359375000001,304.8125"
marker-end=
"url(#arrowhead93)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead93"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M46.246875,304.8125L29.109375,272.8125L119.8984375,237.7841662647697"
marker-end=
"url(#arrowhead94)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead94"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M194.568125,240.8125L258.328125,272.8125L295.065625,304.8125"
marker-end=
"url(#arrowhead95)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead95"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M166.70328125,240.8125L180.92578125,272.8125L180.92578125,304.8125"
marker-end=
"url(#arrowhead96)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead96"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g><g
class=
"edgePath"
style=
"opacity: 1;"
><path
class=
"path"
d=
"M415.30484375,240.8125L443.33984375,272.8125L443.33984375,304.8125"
marker-end=
"url(#arrowhead97)"
style=
"fill:none"
></path><defs><marker
id=
"arrowhead97"
viewBox=
"0 0 10 10"
refX=
"9"
refY=
"5"
markerUnits=
"strokeWidth"
markerWidth=
"8"
markerHeight=
"6"
orient=
"auto"
><path
d=
"M 0 0 L 10 5 L 0 10 z"
class=
"arrowheadPath"
style=
"stroke-width: 1; stroke-dasharray: 1, 0;"
></path></marker></defs></g></g><g
class=
"edgeLabels"
><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
"translate(96.18359375,272.8125)"
style=
"opacity: 1;"
><g
transform=
"translate(-24.4453125,-7)"
class=
"label"
><foreignObject
width=
"48.890625"
height=
"14"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span>
base64
</span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
"translate(29.109375,272.8125)"
style=
"opacity: 1;"
><g
transform=
"translate(-9.109375,-7)"
class=
"label"
><foreignObject
width=
"18.21875"
height=
"14"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span>
url
</span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g><g
class=
"edgeLabel"
transform=
""
style=
"opacity: 1;"
><g
transform=
"translate(0,0)"
class=
"label"
><foreignObject
width=
"0"
height=
"0"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; white-space: nowrap;"
><span></span></div></foreignObject></g></g></g><g
class=
"nodes"
><g
class=
"node"
id=
"yw"
transform=
"translate(322.1328125,130.40625)"
style=
"opacity: 1;"
><circle
x=
"-24.40625"
y=
"-18"
r=
"24.40625"
style=
"fill:#ff99ff;stroke:#fff;color:#fff;"
></circle><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#fff;"
transform=
"translate(-14.40625,-8)"
><foreignObject
width=
"28.8125"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
运维
</div></foreignObject></g></g></g><g
class=
"node"
id=
"resv"
transform=
"translate(158.703125,222.8125)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-38.8046875"
y=
"-18"
width=
"77.609375"
height=
"36"
style=
"fill:#3fafa3;stroke:#fff;color:#fff;"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#fff;"
transform=
"translate(-28.8046875,-8)"
><foreignObject
width=
"57.609375"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
转发服务
</div></foreignObject></g></g></g><g
class=
"node"
id=
"k"
transform=
"translate(399.53515625,222.8125)"
style=
"opacity: 1;"
><rect
rx=
"5"
ry=
"5"
x=
"-28.296875"
y=
"-18"
width=
"56.59375"
height=
"36"
style=
"fill:#ff3333;stroke:#fff;color:#fff;"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#fff;"
transform=
"translate(-18.296875,-8)"
><foreignObject
width=
"36.59375"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
kafka
</div></foreignObject></g></g></g><g
class=
"node"
id=
"store"
transform=
"translate(315.73046875,322.8125)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-38.8046875"
y=
"-18"
width=
"77.609375"
height=
"36"
style=
"fill:#33ffff;stroke:#fff;color:#333;"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#333;"
transform=
"translate(-28.8046875,-8)"
><foreignObject
width=
"57.609375"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
存储服务
</div></foreignObject></g></g></g><g
class=
"node"
id=
"other"
transform=
"translate(180.92578125,322.8125)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-46"
y=
"-18"
width=
"92"
height=
"36"
style=
"fill:#33ffff;stroke:#fff;color:#333;"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
style=
"color:#333;"
transform=
"translate(-36,-8)"
><foreignObject
width=
"72"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
第三方服务
</div></foreignObject></g></g></g><g
class=
"node"
id=
"dev"
transform=
"translate(443.33984375,322.8125)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-38.8046875"
y=
"-18"
width=
"77.609375"
height=
"36"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
transform=
"translate(-28.8046875,-8)"
><foreignObject
width=
"57.609375"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
配置服务
</div></foreignObject></g></g></g><g
class=
"node"
id=
"stream"
transform=
"translate(831.12109375,322.8125)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-38.8046875"
y=
"-18"
width=
"77.609375"
height=
"36"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
transform=
"translate(-28.8046875,-8)"
><foreignObject
width=
"57.609375"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
推流服务
</div></foreignObject></g></g></g><g
class=
"node"
id=
"web"
transform=
"translate(570.94921875,38)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-31.6015625"
y=
"-18"
width=
"63.203125"
height=
"36"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
transform=
"translate(-21.6015625,-8)"
><foreignObject
width=
"43.203125"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
客户端
</div></foreignObject></g></g></g><g
class=
"node"
id=
"gatewy"
transform=
"translate(570.94921875,130.40625)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-24.40625"
y=
"-18"
width=
"48.8125"
height=
"36"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
transform=
"translate(-14.40625,-8)"
><foreignObject
width=
"28.8125"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
网关
</div></foreignObject></g></g></g><g
class=
"node"
id=
"code"
transform=
"translate(701.03515625,322.8125)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-41.28125"
y=
"-18"
width=
"82.5625"
height=
"36"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
transform=
"translate(-31.28125,-8)"
><foreignObject
width=
"62.5625"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
code服务
</div></foreignObject></g></g></g><g
class=
"node"
id=
"org"
transform=
"translate(570.94921875,322.8125)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-38.8046875"
y=
"-18"
width=
"77.609375"
height=
"36"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
transform=
"translate(-28.8046875,-8)"
><foreignObject
width=
"57.609375"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
组织服务
</div></foreignObject></g></g></g><g
class=
"node"
id=
"auth"
transform=
"translate(570.94921875,222.8125)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-38.8046875"
y=
"-18"
width=
"77.609375"
height=
"36"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
transform=
"translate(-28.8046875,-8)"
><foreignObject
width=
"57.609375"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
认证服务
</div></foreignObject></g></g></g><g
class=
"node"
id=
"H"
transform=
"translate(55.88671875,322.8125)"
style=
"opacity: 1;"
><rect
rx=
"0"
ry=
"0"
x=
"-29.0390625"
y=
"-18"
width=
"58.078125"
height=
"36"
></rect><g
class=
"label"
transform=
"translate(0,0)"
><g
transform=
"translate(-19.0390625,-8)"
><foreignObject
width=
"38.078125"
height=
"16"
><div
xmlns=
"http://www.w3.org/1999/xhtml"
style=
"display: inline-block; font-size: 0.9rem; line-height: 16px; white-space: nowrap;"
>
HDFS
</div></foreignObject></g></g></g></g></g></g></svg></div></div>
</body>
</html>
\ No newline at end of file
fanxing.md
0 → 100644
View file @
a05fa1e
# 繁星重构设计说明
1.
在繁星1.0的设计过程中繁星通过Websocket和平台连接,繁星即是服务端接收客户端消息也是客户端向客户端发送消息。
```
mermaid
graph LR
yw((运维))
fx[dev_fx]
style yw fill:#ff99ff,stroke:#fff,color:#fff
style fx fill:#33ffff,stroke:#fff,color:#333
yw--ws-->fx
fx--ws-->yw
```
##### 为了更好的解耦平台让繁星成为一个独立的服务存在利用中间件来实现解耦
```
mermaid
graph LR
yw((运维))
k(kafka)
fx[dev_fx]
style yw fill:#ff99ff,stroke:#fff,color:#fff
style fx fill:#33ffff,stroke:#fff,color:#333
style k fill:#ff3333,stroke:#fff,color:#fff
yw-->k-->fx
fx-->k-->yw
```
### 2. 去除base64图片传输引入HDFS将base64转换成url发送给推送服务
```
mermaid
graph LR
yw((运维))
resv[推送服务]
store[存储服务]
other[第三方服务]
style yw fill:#ff99ff,stroke:#fff,color:#fff
style resv fill:#ff3333,stroke:#fff,color:#fff
style store fill:#33ffff,stroke:#fff,color:#333
style other fill:#33ffff,stroke:#fff,color:#333
yw--http-->resv-->store
resv-->other
```
### 3.引入新的架构方式
#### (1)采用spring cloud 替代现有的微服务架构
#### (2)应用自带的gateway替换掉原来的配置服务
#### (3)采用HDFS替换掉原有的图片服务
#### (4)数据库由原来的postgres和MongoDB合并到postgres(解决大量数据查询MongoDB查询速度过慢问题)
## 整理后的结构图
```
mermaid
graph TB
yw((运维))
resv[转发服务]
k(kafka)
store[存储服务]
other[第三方服务]
dev[配置服务]
stream[推流服务]
web[客户端]
gatewy[网关]
code[code服务]
org[组织服务]
auth[认证服务]
H[HDFS]
style yw fill:#ff99ff,stroke:#fff,color:#fff
style resv fill:#3fafa3,stroke:#fff,color:#fff
style store fill:#33ffff,stroke:#fff,color:#333
style other fill:#33ffff,stroke:#fff,color:#333
style k fill:#ff3333,stroke:#fff,color:#fff
web-->gatewy-->auth
auth-.->org
auth-.->code
auth-.->store
auth-.->dev
auth-.->stream
dev-->k-->yw
yw-->k
yw-->resv--base64-->H
H--url-->resv
resv-->store
resv-->other
k-->dev
```
\ No newline at end of file
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment