WEBVTT

1
00:00:01.700 --> 00:00:05.400
<00:00:01.700>Hi, <00:00:01.900>everyone. <00:00:02.100>Welcome <00:00:02.300>to <00:00:02.500>VR <00:00:02.699>Developers <00:00:02.900>Online <00:00:03.099>Conference.

2
00:00:05.940 --> 00:00:09.890
<00:00:05.940>My <00:00:06.040>name <00:00:06.140>is <00:00:06.240>Sakshi <00:00:06.340>Nasha, <00:00:06.440>and <00:00:06.540>today <00:00:06.640>we <00:00:06.740>are <00:00:06.840>going <00:00:06.940>to <00:00:07.040>talk <00:00:07.140>about <00:00:07.240>boosting <00:00:07.340>OpenSearch

3
00:00:09.890 --> 00:00:12.500
<00:00:09.890>performance <00:00:10.356>by <00:00:10.823>using <00:00:11.290>gRPC.

4
00:00:13.360 --> 00:00:16.910
<00:00:13.360>Before <00:00:13.476>we <00:00:13.593>quickly <00:00:13.709>get <00:00:13.826>started <00:00:13.943>with <00:00:14.059>this <00:00:14.176>topic, <00:00:14.293>I <00:00:14.410>would <00:00:14.526>like <00:00:14.643>to <00:00:14.760>quickly

5
00:00:16.940 --> 00:00:17.990
<00:00:16.940>introduce <00:00:17.884>myself.

6
00:00:19.080 --> 00:00:22.600
<00:00:19.080>My <00:00:19.207>name <00:00:19.334>is <00:00:19.461>Sakshi <00:00:19.589>Nasha, <00:00:19.716>and <00:00:19.843>I'm <00:00:19.970>a <00:00:20.098>software <00:00:20.225>engineer <00:00:20.352>at <00:00:20.479>Cohesity.

7
00:00:23.600 --> 00:00:27.560
<00:00:23.600>I <00:00:23.740>am <00:00:23.880>also <00:00:24.020>an <00:00:24.160>AWS <00:00:24.300>community <00:00:24.440>builder, <00:00:24.580>where <00:00:24.720>I <00:00:24.860>have <00:00:25.000>been

8
00:00:27.620 --> 00:00:30.800
<00:00:27.620>involved <00:00:27.795>with <00:00:27.970>the <00:00:28.145>AWS <00:00:28.320>community <00:00:28.495>for <00:00:28.670>over <00:00:28.845>two <00:00:29.020>years.

9
00:00:31.680 --> 00:00:35.220
<00:00:31.680>I'm <00:00:31.796>also <00:00:31.913>an <00:00:32.030>OpenSearch <00:00:32.146>ambassador, <00:00:32.263>and <00:00:32.380>I <00:00:32.496>have <00:00:32.613>done <00:00:32.729>a <00:00:32.846>lot <00:00:32.963>of <00:00:33.080>OpenSearch

10
00:00:35.280 --> 00:00:37.380
<00:00:35.280>contributions <00:00:35.630>in <00:00:35.980>the <00:00:36.330>security <00:00:36.680>repo,

11
00:00:38.040 --> 00:00:41.240
<00:00:38.040>also <00:00:38.740>in <00:00:39.440>the

12
00:00:42.040 --> 00:00:45.600
<00:00:42.040>gRPC <00:00:42.214>contributions, <00:00:42.390>and <00:00:42.565>the <00:00:42.740>Go <00:00:42.915>repositories <00:00:43.089>that <00:00:43.265>we <00:00:43.440>have.

13
00:00:46.180 --> 00:00:50.060
<00:00:46.180>Apart <00:00:46.355>from <00:00:46.530>OpenSearch <00:00:46.705>as <00:00:46.880>one <00:00:47.055>of <00:00:47.230>my <00:00:47.405>key <00:00:47.580>open-source

14
00:00:50.070 --> 00:00:54.040
<00:00:50.070>contributions, <00:00:50.225>I <00:00:50.381>have <00:00:50.536>done <00:00:50.692>other <00:00:50.847>contributions <00:00:51.003>in <00:00:51.158>Postgres, <00:00:51.314>as <00:00:51.470>well

15
00:00:54.140 --> 00:00:57.800
<00:00:54.140>as <00:00:54.373>many <00:00:54.606>other <00:00:54.840>repositories <00:00:55.073>in <00:00:55.306>the <00:00:55.540>Apache

16
00:00:57.840 --> 00:00:58.490
Foundation.

17
00:00:59.380 --> 00:01:02.460
<00:00:59.380>Apart <00:00:59.580>from <00:00:59.780>doing <00:00:59.980>these <00:01:00.180>contributions, <00:01:00.380>I <00:01:00.580>have <00:01:00.780>over

18
00:01:02.580 --> 00:01:05.920
<00:01:02.580>25-plus <00:01:02.930>international <00:01:03.280>talks <00:01:03.629>on <00:01:03.980>Go,

19
00:01:06.300 --> 00:01:10.240
<00:01:06.300>security, <00:01:06.533>Postgres, <00:01:06.766>and <00:01:07.000>many <00:01:07.233>other <00:01:07.466>open-source <00:01:07.700>technologies.

20
00:01:10.880 --> 00:01:14.399
<00:01:10.880>If <00:01:11.035>you <00:01:11.191>would <00:01:11.346>like <00:01:11.502>to <00:01:11.657>know <00:01:11.813>about <00:01:11.968>my <00:01:12.124>talks <00:01:12.280>or

21
00:01:14.460 --> 00:01:18.340
<00:01:14.460>visit <00:01:14.660>all <00:01:14.860>my <00:01:15.060>past <00:01:15.260>talks, <00:01:15.460>you <00:01:15.660>can <00:01:15.860>scan

22
00:01:18.400 --> 00:01:19.700
<00:01:18.400>this <00:01:18.692>QR <00:01:18.985>to <00:01:19.277>your <00:01:19.570>right.

23
00:01:20.680 --> 00:01:24.120
<00:01:20.680>Apart <00:01:20.820>from <00:01:20.960>work, <00:01:21.100>I <00:01:21.240>like <00:01:21.380>to <00:01:21.520>explore <00:01:21.660>the <00:01:21.800>world <00:01:21.940>and <00:01:22.080>travel

24
00:01:24.140 --> 00:01:27.960
<00:01:24.140>around, <00:01:24.420>and <00:01:24.700>I <00:01:24.980>also <00:01:25.260>like <00:01:25.540>to

25
00:01:28.000 --> 00:01:28.960
<00:01:28.000>play <00:01:28.864>badminton.

26
00:01:29.760 --> 00:01:31.660
<00:01:29.760>That's <00:01:30.226>briefly <00:01:30.693>about <00:01:31.160>myself.

27
00:01:33.020 --> 00:01:36.900
<00:01:33.020>To <00:01:33.195>quickly <00:01:33.370>getting <00:01:33.545>started <00:01:33.720>with <00:01:33.895>our <00:01:34.070>topic <00:01:34.245>for <00:01:34.420>today,

28
00:01:37.480 --> 00:01:39.510
<00:01:37.479>which <00:01:37.829>is <00:01:38.179>boosting <00:01:38.529>OpenSearch <00:01:38.880>performance,

29
00:01:40.460 --> 00:01:40.730
<00:01:40.460>which <00:01:40.702>is

30
00:01:41.660 --> 00:01:45.530
<00:01:41.660>adding <00:01:41.800>gRPC, <00:01:41.940>I <00:01:42.080>would <00:01:42.220>like <00:01:42.360>to <00:01:42.500>quickly <00:01:42.640>touch <00:01:42.780>base <00:01:42.920>upon <00:01:43.060>why

31
00:01:45.580 --> 00:01:47.000
<00:01:45.580>this <00:01:46.006>talk <00:01:46.432>really <00:01:46.858>matters.

32
00:01:47.980 --> 00:01:51.460
<00:01:47.979>And <00:01:48.329>today, <00:01:48.679>in <00:01:49.029>modern-day <00:01:49.380>applications,

33
00:01:51.620 --> 00:01:54.360
<00:01:51.620>OpenSearch <00:01:51.820>is <00:01:52.020>not <00:01:52.220>just <00:01:52.420>a <00:01:52.620>search <00:01:52.820>engine <00:01:53.020>anymore.

34
00:01:54.920 --> 00:01:57.970
<00:01:54.920>It <00:01:55.270>really <00:01:55.620>powers <00:01:55.970>large-scale <00:01:56.320>analytics

35
00:01:58.080 --> 00:02:01.640
<00:01:58.080>workloads. <00:01:58.313>And <00:01:58.546>with <00:01:58.780>analytic <00:01:59.013>workloads <00:01:59.246>that <00:01:59.480>are

36
00:02:01.720 --> 00:02:05.580
<00:02:01.720>talking <00:02:02.070>to <00:02:02.420>many <00:02:02.770>microservices, <00:02:03.120>there

37
00:02:05.640 --> 00:02:09.560
<00:02:05.640>comes <00:02:05.780>the <00:02:05.920>major <00:02:06.060>bottleneck <00:02:06.200>at <00:02:06.340>the <00:02:06.480>transport <00:02:06.620>layer, <00:02:06.760>and <00:02:06.900>that <00:02:07.040>is

38
00:02:09.600 --> 00:02:13.460
<00:02:09.600>the <00:02:09.833>API <00:02:10.066>communication. <00:02:10.299>So <00:02:10.533>every <00:02:10.766>search <00:02:11.000>request

39
00:02:13.600 --> 00:02:17.240
<00:02:13.600>has <00:02:13.950>to <00:02:14.299>coordinate <00:02:14.650>between <00:02:15.000>various

40
00:02:17.280 --> 00:02:20.880
<00:02:17.280>nodes. <00:02:17.455>That <00:02:17.630>involves <00:02:17.805>moving <00:02:17.980>data <00:02:18.155>between <00:02:18.330>clients <00:02:18.505>and <00:02:18.680>the

41
00:02:20.900 --> 00:02:24.800
<00:02:20.900>OpenSearch <00:02:21.100>nodes. <00:02:21.300>And <00:02:21.500>every <00:02:21.700>API <00:02:21.900>request <00:02:22.100>spends <00:02:22.300>significant

42
00:02:24.840 --> 00:02:28.590
<00:02:24.840>amount <00:02:25.015>of <00:02:25.190>time <00:02:25.365>in <00:02:25.540>transportation <00:02:25.715>of <00:02:25.890>those <00:02:26.065>bytes, <00:02:26.240>in

43
00:02:28.620 --> 00:02:32.450
<00:02:28.620>transportation <00:02:28.970>serialization, <00:02:29.320>deserialization <00:02:29.670>at <00:02:30.020>the

44
00:02:32.500 --> 00:02:36.260
<00:02:32.500>client-server <00:02:32.780>both <00:02:33.060>ends. <00:02:33.340>And <00:02:33.620>also, <00:02:33.900>this

45
00:02:36.360 --> 00:02:38.840
<00:02:36.360>adds <00:02:36.560>up <00:02:36.760>to <00:02:36.960>waiting <00:02:37.160>for <00:02:37.360>the <00:02:37.560>response, <00:02:37.760>right?

46
00:02:39.380 --> 00:02:42.920
<00:02:39.380>So <00:02:39.555>this <00:02:39.730>talk <00:02:39.905>is <00:02:40.079>really <00:02:40.255>touching <00:02:40.430>upon, <00:02:40.605>can <00:02:40.780>we

47
00:02:43.020 --> 00:02:46.620
<00:02:43.020>reduce <00:02:43.300>the <00:02:43.580>API <00:02:43.860>communication <00:02:44.140>latency <00:02:44.420>somewhere,

48
00:02:46.920 --> 00:02:48.880
<00:02:46.920>right, <00:02:47.153>so <00:02:47.386>that <00:02:47.620>we <00:02:47.853>gain <00:02:48.086>a <00:02:48.320>performance?

49
00:02:50.400 --> 00:02:54.320
<00:02:50.400>So <00:02:50.633>that's <00:02:50.866>about <00:02:51.100>why <00:02:51.333>we <00:02:51.566>should <00:02:51.800>touch

50
00:02:54.360 --> 00:02:55.360
<00:02:54.360>upon <00:02:54.810>this <00:02:55.260>topic.

51
00:02:56.440 --> 00:03:00.300
<00:02:56.440>And <00:02:56.595>there's <00:02:56.751>a <00:02:56.906>quick <00:02:57.062>formula <00:02:57.217>that <00:02:57.373>most <00:02:57.528>people <00:02:57.684>don't <00:02:57.840>really

52
00:03:00.360 --> 00:03:04.280
<00:03:00.360>understand. <00:03:00.535>Most <00:03:00.710>people <00:03:00.885>really <00:03:01.060>know <00:03:01.235>or <00:03:01.410>think <00:03:01.585>of <00:03:01.760>search

53
00:03:04.320 --> 00:03:08.240
<00:03:04.320>queries <00:03:04.553>as <00:03:04.786>only <00:03:05.019>hitting <00:03:05.253>the <00:03:05.486>request <00:03:05.720>at

54
00:03:08.340 --> 00:03:09.420
<00:03:08.340>the <00:03:09.311>Apache

55
00:03:10.440 --> 00:03:13.880
<00:03:10.440>Lucene <00:03:10.615>execution, <00:03:10.790>right? <00:03:10.965>It's <00:03:11.140>not <00:03:11.315>just <00:03:11.490>about <00:03:11.665>the <00:03:11.840>Lucene

56
00:03:13.940 --> 00:03:16.340
<00:03:13.940>execution <00:03:14.290>or <00:03:14.640>the <00:03:14.990>aggregation <00:03:15.340>processing.

57
00:03:16.880 --> 00:03:20.160
<00:03:16.880>It's <00:03:17.079>also <00:03:17.280>about <00:03:17.480>the <00:03:17.680>communication <00:03:17.880>overhead, <00:03:18.079>such <00:03:18.280>as

58
00:03:20.220 --> 00:03:23.920
<00:03:20.220>serialization, <00:03:20.500>HTTP <00:03:20.780>response <00:03:21.060>handling, <00:03:21.340>network <00:03:21.620>transfers,

59
00:03:24.020 --> 00:03:27.860
<00:03:24.020>client-side <00:03:24.160>parsing. <00:03:24.300>So <00:03:24.440>all <00:03:24.580>of <00:03:24.720>these <00:03:24.860>happens <00:03:25.000>at <00:03:25.140>the <00:03:25.280>transport <00:03:25.420>layer,

60
00:03:28.420 --> 00:03:32.160
<00:03:28.420>and <00:03:28.700>transport <00:03:28.980>overhead <00:03:29.260>is <00:03:29.540>majorly <00:03:29.820>contributing

61
00:03:32.440 --> 00:03:34.720
<00:03:32.440>significantly, <00:03:33.140>really, <00:03:33.840>to

62
00:03:36.700 --> 00:03:39.860
<00:03:36.700>transfer <00:03:36.875>data <00:03:37.049>between <00:03:37.225>various <00:03:37.399>nodes, <00:03:37.575>and <00:03:37.750>at <00:03:37.924>scale, <00:03:38.100>even

63
00:03:40.240 --> 00:03:41.560
<00:03:40.240>microseconds <00:03:41.428>of

64
00:03:43.320 --> 00:03:46.300
<00:03:43.320>latency <00:03:43.786>really <00:03:44.253>hampers <00:03:44.720>performance.

65
00:03:46.980 --> 00:03:50.940
<00:03:46.980>So <00:03:47.260>at <00:03:47.540>scale, <00:03:47.820>even <00:03:48.100>tiny <00:03:48.380>inefficiencies

66
00:03:51.000 --> 00:03:54.880
<00:03:51.000>really <00:03:51.200>compound <00:03:51.400>into <00:03:51.600>massive <00:03:51.800>performance <00:03:52.000>and <00:03:52.200>cost <00:03:52.400>impacts.

67
00:03:55.600 --> 00:03:58.580
<00:03:55.600>That's <00:03:55.880>when <00:03:56.160>gRPC <00:03:56.440>comes <00:03:56.720>into <00:03:57.000>action.

68
00:03:59.420 --> 00:04:02.880
<00:03:59.420>Before <00:03:59.620>really <00:03:59.820>jumping <00:04:00.020>into <00:04:00.220>gRPC <00:04:00.420>and <00:04:00.620>how <00:04:00.820>in

69
00:04:02.900 --> 00:04:06.460
<00:04:02.900>OpenSearch <00:04:03.180>repositories <00:04:03.460>gRPC <00:04:03.740>is <00:04:04.020>being <00:04:04.300>used,

70
00:04:06.900 --> 00:04:08.680
<00:04:06.900>I <00:04:07.133>would <00:04:07.366>like <00:04:07.600>to <00:04:07.833>touch <00:04:08.066>base <00:04:08.300>upon

71
00:04:09.600 --> 00:04:13.420
<00:04:09.600>the <00:04:09.799>basics <00:04:10.000>of <00:04:10.200>gRPC, <00:04:10.400>which <00:04:10.600>is <00:04:10.799>serialization, <00:04:11.000>formatting,

72
00:04:13.920 --> 00:04:17.680
<00:04:13.920>and <00:04:14.047>other <00:04:14.174>parts <00:04:14.301>that <00:04:14.429>are <00:04:14.556>important <00:04:14.683>for <00:04:14.810>us <00:04:14.938>to <00:04:15.065>discuss <00:04:15.192>before <00:04:15.320>we

73
00:04:17.740 --> 00:04:18.421
<00:04:17.740>jump <00:04:18.352>onto

74
00:04:20.519 --> 00:04:23.940
<00:04:20.519>gRPC. <00:04:20.752>And <00:04:20.985>the <00:04:21.219>basics <00:04:21.452>of <00:04:21.685>that <00:04:21.918>is

75
00:04:24.020 --> 00:04:26.100
<00:04:24.020>having <00:04:24.486>the <00:04:24.953>serialization <00:04:25.419>format.

76
00:04:26.620 --> 00:04:27.040
So

77
00:04:28.140 --> 00:04:32.100
<00:04:28.140>most <00:04:28.280>of <00:04:28.419>the <00:04:28.560>companies <00:04:28.700>or <00:04:28.840>most <00:04:28.979>of <00:04:29.120>the <00:04:29.260>organizations <00:04:29.400>and <00:04:29.539>developers

78
00:04:32.560 --> 00:04:36.540
<00:04:32.560>really <00:04:32.760>know <00:04:32.960>that <00:04:33.160>JSON <00:04:33.360>is <00:04:33.560>the <00:04:33.760>default <00:04:33.960>or

79
00:04:36.560 --> 00:04:40.400
<00:04:36.560>standard, <00:04:36.793>and <00:04:37.026>the <00:04:37.260>traditional <00:04:37.493>REST <00:04:37.726>uses <00:04:37.960>JSON.

80
00:04:40.940 --> 00:04:44.840
<00:04:40.940>So <00:04:41.115>I <00:04:41.290>agree <00:04:41.465>that <00:04:41.640>JSON <00:04:41.815>is <00:04:41.990>human-readable, <00:04:42.165>and <00:04:42.340>it's

81
00:04:44.880 --> 00:04:47.260
<00:04:44.880>really <00:04:45.159>flexible, <00:04:45.440>right, <00:04:45.719>because <00:04:46.000>it's <00:04:46.280>schema-free.

82
00:04:48.040 --> 00:04:48.340
But

83
00:04:49.420 --> 00:04:50.660
<00:04:49.420>when <00:04:49.792>it <00:04:50.164>comes <00:04:50.535>to

84
00:04:52.420 --> 00:04:55.780
<00:04:52.420>having <00:04:52.700>flexibility, <00:04:52.980>what's <00:04:53.260>add <00:04:53.540>up <00:04:53.820>is

85
00:04:55.840 --> 00:04:58.420
<00:04:55.840>overhead, <00:04:56.306>the <00:04:56.773>overhead <00:04:57.240>of

86
00:04:59.460 --> 00:05:02.620
<00:04:59.460>sending <00:04:59.739>each <00:05:00.020>time <00:05:00.299>the <00:05:00.580>repeated <00:05:00.859>fields.

87
00:05:02.700 --> 00:05:04.140
<00:05:02.700>So <00:05:02.916>what <00:05:03.132>I <00:05:03.348>mean <00:05:03.563>by <00:05:03.780>this <00:05:03.996>is,

88
00:05:05.340 --> 00:05:08.940
<00:05:05.340>if <00:05:05.456>we <00:05:05.573>consider <00:05:05.690>this <00:05:05.806>as <00:05:05.923>one <00:05:06.039>of <00:05:06.156>the <00:05:06.273>example <00:05:06.390>here, <00:05:06.506>we <00:05:06.623>can <00:05:06.739>see

89
00:05:09.020 --> 00:05:12.960
<00:05:09.020>that <00:05:09.127>if <00:05:09.235>there's <00:05:09.343>a <00:05:09.450>user <00:05:09.558>object, <00:05:09.666>so <00:05:09.773>there <00:05:09.881>will <00:05:09.989>be <00:05:10.096>ID <00:05:10.204>that <00:05:10.312>would <00:05:10.419>be

90
00:05:12.980 --> 00:05:16.360
<00:05:12.980>passed <00:05:13.080>for <00:05:13.180>every <00:05:13.280>user, <00:05:13.380>and <00:05:13.480>there <00:05:13.580>would <00:05:13.680>be <00:05:13.780>name <00:05:13.880>that <00:05:13.980>would <00:05:14.080>be <00:05:14.180>passed <00:05:14.280>for <00:05:14.380>every

91
00:05:16.400 --> 00:05:19.120
<00:05:16.400>object. <00:05:16.679>So <00:05:16.960>this <00:05:17.239>ID <00:05:17.520>in <00:05:17.799>the

92
00:05:19.960 --> 00:05:23.260
<00:05:19.960>colons <00:05:20.115>as <00:05:20.271>well <00:05:20.426>as <00:05:20.582>in <00:05:20.737>the <00:05:20.893>apostrophes <00:05:21.048>will <00:05:21.204>be <00:05:21.359>passed

93
00:05:23.320 --> 00:05:27.160
<00:05:23.320>repeatedly <00:05:23.599>over <00:05:23.880>multiple <00:05:24.159>objects, <00:05:24.440>and <00:05:24.719>even

94
00:05:27.200 --> 00:05:29.920
<00:05:27.200>the <00:05:27.340>value <00:05:27.479>is <00:05:27.620>different, <00:05:27.760>but <00:05:27.900>the <00:05:28.039>field <00:05:28.180>name <00:05:28.320>is <00:05:28.460>the <00:05:28.599>same.

95
00:05:30.080 --> 00:05:33.900
<00:05:30.080>So <00:05:30.280>these <00:05:30.479>repeated <00:05:30.680>fields <00:05:30.880>really <00:05:31.080>increase <00:05:31.280>the <00:05:31.479>payload

96
00:05:34.000 --> 00:05:37.500
<00:05:34.000>size. <00:05:34.127>So <00:05:34.254>if <00:05:34.381>we <00:05:34.509>have <00:05:34.636>the <00:05:34.763>payload <00:05:34.890>size <00:05:35.018>here, <00:05:35.145>it <00:05:35.272>could <00:05:35.400>be

97
00:05:37.660 --> 00:05:41.200
<00:05:37.659>150 <00:05:37.859>bytes <00:05:38.059>per <00:05:38.260>message, <00:05:38.460>right? <00:05:38.659>And <00:05:38.859>every <00:05:39.059>request

98
00:05:41.260 --> 00:05:44.920
<00:05:41.260>contains <00:05:41.387>this <00:05:41.514>repeated <00:05:41.641>field, <00:05:41.769>so <00:05:41.896>the <00:05:42.023>larger <00:05:42.150>payload <00:05:42.278>and <00:05:42.405>the <00:05:42.532>text <00:05:42.659>parsing

99
00:05:45.000 --> 00:05:48.880
<00:05:45.000>cost <00:05:45.116>increases. <00:05:45.233>So <00:05:45.350>the <00:05:45.466>more <00:05:45.583>payload <00:05:45.700>that <00:05:45.816>you <00:05:45.933>have, <00:05:46.050>the <00:05:46.166>more <00:05:46.283>bytes <00:05:46.400>are

100
00:05:48.920 --> 00:05:50.860
<00:05:48.920>transferred <00:05:49.270>over <00:05:49.620>the <00:05:49.970>network, <00:05:50.320>right?

101
00:05:51.460 --> 00:05:54.800
<00:05:51.460>And <00:05:51.659>this <00:05:51.859>really <00:05:52.060>hampers <00:05:52.260>the <00:05:52.460>performance <00:05:52.659>at <00:05:52.859>scale.

102
00:05:54.860 --> 00:05:58.680
<00:05:54.860>Now, <00:05:55.035>if <00:05:55.210>we <00:05:55.385>have <00:05:55.560>a <00:05:55.735>comparison <00:05:55.910>with <00:05:56.085>the <00:05:56.260>other

103
00:05:58.720 --> 00:06:02.580
<00:05:58.720>serialization <00:05:58.953>format, <00:05:59.186>which <00:05:59.420>is <00:05:59.653>Protobuf, <00:05:59.886>how <00:06:00.120>that

104
00:06:02.740 --> 00:06:06.380
<00:06:02.740>is <00:06:02.940>different. <00:06:03.140>So <00:06:03.340>Protobuf <00:06:03.540>is <00:06:03.740>simply <00:06:03.940>a <00:06:04.140>compact

105
00:06:06.480 --> 00:06:10.410
<00:06:06.480>binary <00:06:06.713>serialization <00:06:06.946>format. <00:06:07.180>So <00:06:07.413>instead <00:06:07.646>of <00:06:07.880>sending

106
00:06:10.440 --> 00:06:14.260
<00:06:10.440>the <00:06:10.673>repetitive <00:06:10.906>fields <00:06:11.140>like <00:06:11.373>the <00:06:11.606>title, <00:06:11.840>user

107
00:06:14.360 --> 00:06:18.320
<00:06:14.360>ID, <00:06:14.535>what <00:06:14.710>Protobuf <00:06:14.885>does <00:06:15.060>is <00:06:15.235>it <00:06:15.410>just <00:06:15.585>encodes <00:06:15.760>the

108
00:06:18.400 --> 00:06:22.120
<00:06:18.400>fields <00:06:18.750>as <00:06:19.099>compact <00:06:19.450>numerical <00:06:19.799>identifiers.

109
00:06:22.760 --> 00:06:26.432
<00:06:22.760>So <00:06:23.110>this <00:06:23.460>Compact <00:06:23.810>identical <00:06:24.159>identifiers

110
00:06:26.792 --> 00:06:30.032
<00:06:26.792>really <00:06:26.992>reduce <00:06:27.192>the <00:06:27.392>size. <00:06:27.592>So <00:06:27.792>this <00:06:27.992>is <00:06:28.192>done

111
00:06:30.452 --> 00:06:31.692
<00:06:30.452>simply <00:06:31.010>by <00:06:31.568>having

112
00:06:32.592 --> 00:06:35.232
<00:06:32.592>the <00:06:32.767>.proto <00:06:32.942>file. <00:06:33.116>So <00:06:33.292>you <00:06:33.467>define <00:06:33.642>the <00:06:33.817>.proto <00:06:33.991>file.

113
00:06:35.792 --> 00:06:39.652
<00:06:35.792>So <00:06:35.947>if <00:06:36.103>we <00:06:36.258>consider <00:06:36.414>the <00:06:36.569>same <00:06:36.725>example <00:06:36.880>here, <00:06:37.036>this <00:06:37.192>is

114
00:06:39.712 --> 00:06:43.392
<00:06:39.712>where <00:06:39.887>the <00:06:40.062>.proto <00:06:40.236>file <00:06:40.412>comes <00:06:40.587>in, <00:06:40.762>and <00:06:40.937>here <00:06:41.111>we

115
00:06:43.432 --> 00:06:47.232
<00:06:43.432>define <00:06:43.587>that <00:06:43.743>ID <00:06:43.898>should <00:06:44.054>have <00:06:44.209>field <00:06:44.365>number <00:06:44.520>one, <00:06:44.676>name <00:06:44.832>should

116
00:06:47.292 --> 00:06:51.272
<00:06:47.292>have <00:06:47.432>field <00:06:47.572>number <00:06:47.712>two, <00:06:47.852>and <00:06:47.992>then <00:06:48.132>Boolean <00:06:48.272>value <00:06:48.412>as <00:06:48.552>active, <00:06:48.692>inactive,

117
00:06:51.732 --> 00:06:54.112
<00:06:51.732>like <00:06:51.931>true, <00:06:52.131>false <00:06:52.332>should <00:06:52.532>have <00:06:52.732>field <00:06:52.931>number <00:06:53.131>three.

118
00:06:54.212 --> 00:06:56.772
<00:06:54.212>So <00:06:54.387>these <00:06:54.562>are <00:06:54.736>the <00:06:54.912>identifiers <00:06:55.087>that <00:06:55.262>we <00:06:55.437>have <00:06:55.611>defined.

119
00:06:56.872 --> 00:07:00.692
<00:06:56.872>So <00:06:57.047>if <00:06:57.222>there's <00:06:57.397>user <00:06:57.572>one, <00:06:57.747>user <00:06:57.922>two, <00:06:58.097>everyone <00:06:58.272>will

120
00:07:00.752 --> 00:07:04.732
<00:07:00.752>get <00:07:00.892>just <00:07:01.032>one <00:07:01.172>bit <00:07:01.312>of <00:07:01.452>it. <00:07:01.592>So <00:07:01.732>one <00:07:01.872>first <00:07:02.012>bit <00:07:02.152>is

121
00:07:04.812 --> 00:07:05.192
having

122
00:07:06.692 --> 00:07:10.112
<00:07:06.692>ID, <00:07:06.832>and <00:07:06.972>the <00:07:07.112>second <00:07:07.252>bit <00:07:07.392>is <00:07:07.532>having <00:07:07.672>value <00:07:07.812>as <00:07:07.952>the <00:07:08.092>name.

123
00:07:10.652 --> 00:07:14.332
<00:07:10.652>So <00:07:10.827>you <00:07:11.002>don't <00:07:11.176>have <00:07:11.352>to <00:07:11.527>repeatedly <00:07:11.702>send <00:07:11.877>this <00:07:12.051>large

124
00:07:14.392 --> 00:07:17.892
<00:07:14.392>number <00:07:14.625>of <00:07:14.858>string <00:07:15.092>values <00:07:15.325>for <00:07:15.558>every <00:07:15.792>user

125
00:07:17.932 --> 00:07:21.892
<00:07:17.932>message. <00:07:18.087>So <00:07:18.243>this <00:07:18.398>really <00:07:18.554>reduces <00:07:18.709>the <00:07:18.865>payload <00:07:19.020>size <00:07:19.176>that <00:07:19.332>is

126
00:07:21.932 --> 00:07:25.752
<00:07:21.932>getting <00:07:22.059>transferred <00:07:22.186>at <00:07:22.313>scale. <00:07:22.441>And <00:07:22.568>if <00:07:22.695>you <00:07:22.822>compare <00:07:22.950>for <00:07:23.077>just <00:07:23.204>one <00:07:23.332>of

127
00:07:25.812 --> 00:07:29.792
<00:07:25.812>the <00:07:26.012>object <00:07:26.212>size <00:07:26.412>here, <00:07:26.612>this <00:07:26.812>is <00:07:27.012>40 <00:07:27.212>bytes

128
00:07:29.872 --> 00:07:30.172
per

129
00:07:31.312 --> 00:07:35.072
<00:07:31.312>message. <00:07:31.512>So <00:07:31.712>the <00:07:31.912>fewer <00:07:32.112>the <00:07:32.312>bytes, <00:07:32.512>the <00:07:32.712>fewer

130
00:07:35.872 --> 00:07:38.732
<00:07:35.872>is <00:07:36.047>the <00:07:36.222>network <00:07:36.397>cost <00:07:36.572>that's <00:07:36.747>going <00:07:36.922>to <00:07:37.097>be <00:07:37.272>there.

131
00:07:39.512 --> 00:07:43.012
<00:07:39.512>So <00:07:39.687>there <00:07:39.862>will <00:07:40.037>be <00:07:40.212>having <00:07:40.387>efficiency <00:07:40.562>in <00:07:40.737>terms <00:07:40.912>of

132
00:07:43.292 --> 00:07:47.252
<00:07:43.292>serialization <00:07:43.492>and <00:07:43.692>deserialization <00:07:43.892>at <00:07:44.092>both <00:07:44.292>the <00:07:44.492>end <00:07:44.692>clients

133
00:07:47.332 --> 00:07:50.992
<00:07:47.332>as <00:07:47.472>well <00:07:47.611>as <00:07:47.752>server. <00:07:47.892>So <00:07:48.032>the <00:07:48.171>impact <00:07:48.312>becomes <00:07:48.452>really <00:07:48.592>important <00:07:48.732>at

134
00:07:51.072 --> 00:07:54.892
<00:07:51.072>scale <00:07:51.247>when <00:07:51.422>we <00:07:51.597>consider <00:07:51.772>having <00:07:51.947>fewer <00:07:52.122>bytes <00:07:52.297>transferred, <00:07:52.472>lower

135
00:07:54.972 --> 00:07:58.832
<00:07:54.972>CPU <00:07:55.127>usage, <00:07:55.283>because <00:07:55.438>lesser <00:07:55.594>the <00:07:55.749>bytes, <00:07:55.905>lesser <00:07:56.060>the <00:07:56.216>CPU <00:07:56.371>will

136
00:07:58.912 --> 00:08:02.592
<00:07:58.912>be <00:07:59.087>utilized, <00:07:59.262>and <00:07:59.436>there <00:07:59.611>will <00:07:59.787>be <00:07:59.962>faster <00:08:00.137>serialization, <00:08:00.311>deserialization.

137
00:08:02.622 --> 00:08:06.272
<00:08:02.622>And <00:08:02.822>in <00:08:03.022>turn, <00:08:03.222>this <00:08:03.422>really <00:08:03.622>lowers <00:08:03.822>the <00:08:04.022>latency.

138
00:08:06.812 --> 00:08:10.212
<00:08:06.812>So <00:08:07.045>this <00:08:07.278>is <00:08:07.512>exactly <00:08:07.745>why <00:08:07.978>modern <00:08:08.212>distributed

139
00:08:10.312 --> 00:08:13.572
<00:08:10.312>systems <00:08:10.662>like <00:08:11.012>Google, <00:08:11.362>Uber, <00:08:11.712>Netflix,

140
00:08:14.952 --> 00:08:17.732
<00:08:14.952>all <00:08:15.302>have <00:08:15.652>adopted <00:08:16.002>Protobuf <00:08:16.352>internally.

141
00:08:18.472 --> 00:08:22.072
<00:08:18.472>And <00:08:18.751>that's <00:08:19.032>why <00:08:19.311>even <00:08:19.592>OpenSearch <00:08:19.871>has

142
00:08:22.132 --> 00:08:22.992
<00:08:22.132>integrated <00:08:22.906>that.

143
00:08:23.972 --> 00:08:27.532
<00:08:23.972>But <00:08:24.147>there's <00:08:24.322>a <00:08:24.496>misconception <00:08:24.671>that <00:08:24.847>people <00:08:25.022>usually <00:08:25.197>have <00:08:25.371>which

144
00:08:27.612 --> 00:08:28.052
is...

145
00:08:29.872 --> 00:08:33.783
<00:08:29.872>Okay, <00:08:30.152>my <00:08:30.432>slides. <00:08:30.712>Yeah. <00:08:30.992>So <00:08:31.272>this

146
00:08:34.112 --> 00:08:37.893
<00:08:34.111>is <00:08:34.228>one <00:08:34.345>of <00:08:34.462>the <00:08:34.578>misconception <00:08:34.695>that <00:08:34.812>people <00:08:34.928>have, <00:08:35.045>which <00:08:35.161>is <00:08:35.278>Protobuf <00:08:35.395>is <00:08:35.511>only

147
00:08:37.992 --> 00:08:41.293
<00:08:37.991>used <00:08:38.225>with <00:08:38.458>gRPC. <00:08:38.692>That's <00:08:38.925>really <00:08:39.158>not <00:08:39.391>true.

148
00:08:41.612 --> 00:08:45.192
<00:08:41.611>So <00:08:41.845>Protobuf <00:08:42.078>or <00:08:42.312>JSON, <00:08:42.545>these <00:08:42.778>two <00:08:43.011>are

149
00:08:45.452 --> 00:08:49.052
<00:08:45.452>serialization <00:08:45.652>format, <00:08:45.852>and <00:08:46.052>this <00:08:46.252>has <00:08:46.452>nothing <00:08:46.652>to <00:08:46.852>do

150
00:08:49.272 --> 00:08:52.662
<00:08:49.272>with <00:08:49.552>REST. <00:08:49.832>REST <00:08:50.112>is <00:08:50.392>protocol <00:08:50.672>layer.

151
00:08:53.192 --> 00:08:57.052
<00:08:53.192>And <00:08:53.347>also <00:08:53.503>gRPC <00:08:53.658>is <00:08:53.814>at <00:08:53.969>the <00:08:54.125>protocol <00:08:54.280>layer, <00:08:54.436>at <00:08:54.592>the

152
00:08:57.072 --> 00:08:59.222
<00:08:57.072>transport <00:08:57.538>layer. <00:08:58.005>Protobuf <00:08:58.472>and

153
00:09:00.172 --> 00:09:02.432
<00:09:00.172>JSON <00:09:00.452>are <00:09:00.732>at <00:09:01.012>the <00:09:01.292>serialization <00:09:01.572>format.

154
00:09:02.592 --> 00:09:06.112
<00:09:02.592>So <00:09:02.766>even <00:09:02.942>Protobuf <00:09:03.117>can <00:09:03.292>be <00:09:03.467>used <00:09:03.641>with <00:09:03.817>REST, <00:09:03.992>and

155
00:09:06.352 --> 00:09:09.932
<00:09:06.352>LinkedIn <00:09:06.632>has <00:09:06.911>used <00:09:07.192>Protobuf <00:09:07.472>with <00:09:07.752>their

156
00:09:10.332 --> 00:09:14.092
<00:09:10.332>OS <00:09:10.612>level <00:09:10.891>REST.li <00:09:11.172>APIs. <00:09:11.452>So <00:09:11.732>you

157
00:09:14.172 --> 00:09:17.831
<00:09:14.172>can <00:09:14.299>quickly <00:09:14.426>scan <00:09:14.553>this <00:09:14.681>QR <00:09:14.808>at <00:09:14.935>the <00:09:15.062>right, <00:09:15.190>and <00:09:15.317>you <00:09:15.444>will <00:09:15.572>be

158
00:09:17.892 --> 00:09:18.672
<00:09:17.892>redirected <00:09:18.594>to

159
00:09:20.872 --> 00:09:23.232
<00:09:20.872>my <00:09:21.072>GitHub <00:09:21.271>repo, <00:09:21.472>where <00:09:21.671>I <00:09:21.872>have <00:09:22.072>a <00:09:22.271>detailed

160
00:09:25.132 --> 00:09:28.552
<00:09:25.132>research <00:09:25.365>done <00:09:25.598>on <00:09:25.832>how <00:09:26.065>LinkedIn <00:09:26.298>really <00:09:26.531>uses

161
00:09:29.912 --> 00:09:33.672
<00:09:29.912>Protobuf <00:09:30.378>with <00:09:30.845>the <00:09:31.312>REST

162
00:09:33.732 --> 00:09:37.112
<00:09:33.732>frameworks <00:09:33.887>that <00:09:34.043>they <00:09:34.198>have. <00:09:34.354>So <00:09:34.509>this <00:09:34.665>is <00:09:34.820>one <00:09:34.976>of <00:09:35.132>the

163
00:09:37.252 --> 00:09:41.232
<00:09:37.252>misconception <00:09:37.379>that <00:09:37.506>people <00:09:37.633>have. <00:09:37.761>So <00:09:37.888>just <00:09:38.015>to <00:09:38.142>keep <00:09:38.270>in <00:09:38.397>mind <00:09:38.524>that <00:09:38.651>gRPC

164
00:09:41.272 --> 00:09:45.212
<00:09:41.272>combines <00:09:41.505>Protobuf <00:09:41.738>with <00:09:41.972>HTTP/2 <00:09:42.205>to <00:09:42.438>reduce <00:09:42.672>the

165
00:09:45.272 --> 00:09:49.032
<00:09:45.272>transport <00:09:45.447>overhead <00:09:45.622>significantly, <00:09:45.797>and <00:09:45.972>this <00:09:46.147>distinction <00:09:46.322>is <00:09:46.497>very <00:09:46.672>important.

166
00:09:49.992 --> 00:09:51.152
<00:09:49.992>When <00:09:51.036>OpenSearch

167
00:09:52.012 --> 00:09:55.792
<00:09:52.012>did <00:09:52.151>not <00:09:52.291>just <00:09:52.431>add <00:09:52.571>Protobuf <00:09:52.712>support, <00:09:52.852>it <00:09:52.992>also <00:09:53.132>add <00:09:53.271>native <00:09:53.411>gRPC

168
00:09:55.852 --> 00:09:59.712
<00:09:55.852>support. <00:09:55.992>So <00:09:56.132>this <00:09:56.271>is <00:09:56.411>a <00:09:56.552>little <00:09:56.692>different <00:09:56.832>from <00:09:56.972>what <00:09:57.112>LinkedIn <00:09:57.252>does.

169
00:09:59.752 --> 00:10:03.252
<00:09:59.752>But <00:09:59.985>yeah, <00:10:00.218>that's <00:10:00.452>how <00:10:00.685>misconception <00:10:00.918>really <00:10:01.151>are.

170
00:10:04.252 --> 00:10:04.552
So,

171
00:10:05.892 --> 00:10:09.272
<00:10:05.892>moving <00:10:06.125>to <00:10:06.358>why <00:10:06.592>OpenSearch <00:10:06.825>really <00:10:07.058>added <00:10:07.292>native

172
00:10:09.352 --> 00:10:13.092
<00:10:09.352>gRPC. <00:10:09.585>So <00:10:09.818>at <00:10:10.052>OpenSearch, <00:10:10.285>the <00:10:10.518>workloads <00:10:10.752>become

173
00:10:13.132 --> 00:10:17.112
<00:10:13.132>more <00:10:13.365>data-intensive, <00:10:13.598>and <00:10:13.832>REST <00:10:14.065>started <00:10:14.298>becoming <00:10:14.531>a

174
00:10:17.132 --> 00:10:20.872
<00:10:17.132>bottleneck <00:10:17.411>for <00:10:17.691>certain <00:10:17.972>high-throughput <00:10:18.252>use <00:10:18.531>cases

175
00:10:20.952 --> 00:10:22.492
<00:10:20.952>like <00:10:21.414>ANN <00:10:21.876>vector <00:10:22.338>search,

176
00:10:23.952 --> 00:10:27.712
<00:10:23.952>bulk <00:10:24.185>ingestions. <00:10:24.418>So <00:10:24.652>OpenSearch <00:10:24.885>not <00:10:25.118>just <00:10:25.352>added

177
00:10:27.752 --> 00:10:31.512
<00:10:27.752>gRPC, <00:10:27.952>but <00:10:28.151>they <00:10:28.352>added <00:10:28.551>gRPC <00:10:28.752>natively <00:10:28.952>inside <00:10:29.151>the

178
00:10:31.572 --> 00:10:35.532
<00:10:31.572>OpenSearch <00:10:31.747>nodes. <00:10:31.922>So <00:10:32.097>OpenSearch <00:10:32.272>did <00:10:32.447>not <00:10:32.622>build <00:10:32.797>as <00:10:32.972>a

179
00:10:35.552 --> 00:10:39.192
<00:10:35.552>proxy. <00:10:35.727>It <00:10:35.902>was <00:10:36.077>built <00:10:36.252>natively <00:10:36.427>onto <00:10:36.602>the <00:10:36.777>OpenSearch <00:10:36.952>nodes.

180
00:10:39.832 --> 00:10:40.842
<00:10:39.832>And <00:10:40.741>this

181
00:10:41.712 --> 00:10:45.551
<00:10:41.712>has <00:10:41.852>to <00:10:41.992>come <00:10:42.132>up <00:10:42.271>with <00:10:42.412>a <00:10:42.552>cost <00:10:42.692>of <00:10:42.832>how <00:10:42.972>do <00:10:43.112>we

182
00:10:45.632 --> 00:10:49.212
<00:10:45.632>really <00:10:45.787>maintain <00:10:45.943>both <00:10:46.098>of <00:10:46.254>the <00:10:46.409>request <00:10:46.565>handlers, <00:10:46.720>how <00:10:46.876>is <00:10:47.031>the

183
00:10:49.252 --> 00:10:53.212
<00:10:49.252>functionality <00:10:49.391>going <00:10:49.531>to <00:10:49.671>be <00:10:49.811>there <00:10:49.952>together <00:10:50.092>for <00:10:50.232>REST <00:10:50.372>and <00:10:50.512>gRPC <00:10:50.651>to

184
00:10:53.712 --> 00:10:57.372
<00:10:53.712>come <00:10:53.887>up <00:10:54.062>together? <00:10:54.237>And <00:10:54.412>that's <00:10:54.587>when <00:10:54.762>one <00:10:54.937>of <00:10:55.112>the

185
00:10:57.912 --> 00:10:58.592
major

186
00:10:59.692 --> 00:11:03.412
<00:10:59.692>problem <00:10:59.925>was <00:11:00.158>faced. <00:11:00.392>So <00:11:00.625>that <00:11:00.858>was <00:11:01.092>synchronization

187
00:11:03.492 --> 00:11:06.272
<00:11:03.492>between <00:11:03.666>REST <00:11:03.842>and <00:11:04.016>gRPC. <00:11:04.192>That <00:11:04.367>was <00:11:04.541>the <00:11:04.717>core <00:11:04.891>problem.

188
00:11:06.352 --> 00:11:09.532
<00:11:06.352>So <00:11:06.585>there <00:11:06.818>were <00:11:07.052>two <00:11:07.285>APIs <00:11:07.518>having <00:11:07.752>exactly

189
00:11:09.972 --> 00:11:13.692
<00:11:09.972>staying <00:11:10.146>fundamentally <00:11:10.322>very <00:11:10.497>same, <00:11:10.672>having <00:11:10.847>the <00:11:11.021>same <00:11:11.197>input, <00:11:11.372>same

190
00:11:13.772 --> 00:11:14.232
output,

191
00:11:15.112 --> 00:11:17.451
<00:11:15.112>having <00:11:15.462>the <00:11:15.812>same <00:11:16.161>validation <00:11:16.512>rules.

192
00:11:17.512 --> 00:11:20.252
<00:11:17.512>So <00:11:17.745>how <00:11:17.978>do <00:11:18.212>we <00:11:18.445>really <00:11:18.678>synchronize <00:11:18.911>them?

193
00:11:20.962 --> 00:11:24.712
<00:11:20.962>Manual <00:11:21.137>synchronization <00:11:21.312>is <00:11:21.487>not <00:11:21.662>going <00:11:21.837>to <00:11:22.012>be <00:11:22.187>good <00:11:22.362>at

194
00:11:24.792 --> 00:11:28.492
<00:11:24.792>scale. <00:11:25.072>So <00:11:25.352>what <00:11:25.632>did <00:11:25.912>we <00:11:26.192>do

195
00:11:28.532 --> 00:11:32.072
<00:11:28.532>to <00:11:28.765>cater <00:11:28.998>to <00:11:29.232>this <00:11:29.465>problem? <00:11:29.698>So <00:11:29.932>we

196
00:11:32.112 --> 00:11:36.092
<00:11:32.112>developed <00:11:32.312>an <00:11:32.512>automated <00:11:32.712>conversion <00:11:32.911>pipeline <00:11:33.112>that <00:11:33.312>really <00:11:33.512>converts

197
00:11:36.112 --> 00:11:39.812
<00:11:36.112>the <00:11:36.812>OpenAPI's <00:11:37.512>specializations

198
00:11:40.172 --> 00:11:43.972
<00:11:40.172>into <00:11:40.347>Protobuf <00:11:40.522>definitions. <00:11:40.697>So <00:11:40.872>this <00:11:41.047>is <00:11:41.222>what <00:11:41.397>the <00:11:41.572>pipeline

199
00:11:44.012 --> 00:11:44.582
<00:11:44.012>looks <00:11:44.525>like

200
00:11:46.192 --> 00:11:49.992
<00:11:46.192>in <00:11:46.392>the <00:11:46.592>grammatical <00:11:46.792>figures. <00:11:46.992>So <00:11:47.192>we <00:11:47.392>had <00:11:47.592>developed

201
00:11:50.072 --> 00:11:53.972
<00:11:50.072>an <00:11:50.272>OpenAPI <00:11:50.472>generator <00:11:50.672>that <00:11:50.872>really <00:11:51.072>converts <00:11:51.272>how <00:11:51.472>OpenAPI

202
00:11:53.992 --> 00:11:57.712
<00:11:53.992>specifications <00:11:54.225>are <00:11:54.458>directly <00:11:54.692>mapping <00:11:54.925>into <00:11:55.158>native <00:11:55.391>gRPC.

203
00:11:58.292 --> 00:12:02.192
<00:11:58.292>And <00:11:58.467>this <00:11:58.642>had <00:11:58.817>various <00:11:58.992>pipeline <00:11:59.167>stages <00:11:59.342>such <00:11:59.517>as <00:11:59.692>pre-processing,

204
00:12:02.292 --> 00:12:05.952
<00:12:02.292>having <00:12:02.467>code <00:12:02.642>conversions, <00:12:02.817>and <00:12:02.992>having <00:12:03.167>the <00:12:03.342>validation <00:12:03.517>and <00:12:03.692>compatibility

205
00:12:06.012 --> 00:12:09.752
<00:12:06.012>checks <00:12:06.245>that <00:12:06.478>ensures <00:12:06.712>REST <00:12:06.945>as <00:12:07.178>well <00:12:07.411>as

206
00:12:09.792 --> 00:12:12.912
<00:12:09.792>gRPC <00:12:10.258>stay <00:12:10.725>equivalent. <00:12:11.192>That's

207
00:12:13.472 --> 00:12:17.352
<00:12:13.472>how <00:12:13.627>we <00:12:13.783>are <00:12:13.938>ensuring <00:12:14.094>that <00:12:14.249>REST <00:12:14.405>and <00:12:14.560>gRPC <00:12:14.716>are <00:12:14.872>evolving

208
00:12:17.392 --> 00:12:19.832
<00:12:17.392>together, <00:12:17.858>and <00:12:18.325>they're <00:12:18.792>evolving

209
00:12:19.872 --> 00:12:22.932
<00:12:19.872>automatically <00:12:20.222>and <00:12:20.572>not <00:12:20.921>having <00:12:21.271>manual

210
00:12:24.048 --> 00:12:25.988
<00:12:24.048>... <00:12:24.328>manual <00:12:24.608>pipelines <00:12:24.888>that <00:12:25.168>run <00:12:25.448>through.

211
00:12:26.888 --> 00:12:30.788
<00:12:26.888>So <00:12:27.088>that's <00:12:27.288>all <00:12:27.488>about <00:12:27.688>how <00:12:27.888>the <00:12:28.088>core <00:12:28.288>problem

212
00:12:30.848 --> 00:12:34.228
<00:12:30.848>was <00:12:31.022>to <00:12:31.198>cater <00:12:31.372>to <00:12:31.548>it. <00:12:31.723>Now <00:12:31.897>moving <00:12:32.073>on <00:12:32.247>to

213
00:12:35.308 --> 00:12:37.758
<00:12:35.308>where <00:12:35.541>gRPC <00:12:35.774>really <00:12:36.008>stands <00:12:36.241>today <00:12:36.474>in <00:12:36.708>OpenSearch.

214
00:12:38.288 --> 00:12:42.128
<00:12:38.288>So <00:12:38.428>to <00:12:38.568>be <00:12:38.708>honest, <00:12:38.848>it's <00:12:38.988>not <00:12:39.128>supported <00:12:39.268>onto <00:12:39.408>all <00:12:39.548>of <00:12:39.688>the

215
00:12:42.188 --> 00:12:45.788
<00:12:42.188>APIs. <00:12:42.421>gRPC <00:12:42.654>support <00:12:42.888>was <00:12:43.121>added <00:12:43.354>into <00:12:43.588>OpenSearch

216
00:12:45.988 --> 00:12:49.728
<00:12:45.988>3.2, <00:12:46.268>and <00:12:46.548>it <00:12:46.828>supports <00:12:47.108>bulk, <00:12:47.388>KNN,

217
00:12:49.788 --> 00:12:53.688
<00:12:49.788>and <00:12:49.915>search. <00:12:50.042>So <00:12:50.169>these <00:12:50.297>are <00:12:50.424>the <00:12:50.551>three <00:12:50.678>APIs <00:12:50.806>that <00:12:50.933>it <00:12:51.060>generally <00:12:51.188>supports

218
00:12:53.708 --> 00:12:57.568
<00:12:53.708>in <00:12:53.908>3.2. <00:12:54.108>And <00:12:54.308>sorry, <00:12:54.507>search <00:12:54.708>is <00:12:54.908>still <00:12:55.108>experimental,

219
00:12:58.288 --> 00:13:01.948
<00:12:58.288>but <00:12:58.488>KNN <00:12:58.688>and <00:12:58.888>bulk <00:12:59.088>ingestions <00:12:59.288>are <00:12:59.488>really <00:12:59.688>generally

220
00:13:01.988 --> 00:13:05.248
<00:13:01.988>available <00:13:02.188>in <00:13:02.388>3.2. <00:13:02.588>And <00:13:02.788>you <00:13:02.988>can <00:13:03.188>also <00:13:03.388>use

221
00:13:05.308 --> 00:13:08.318
<00:13:05.308>OpenSearch <00:13:05.774>Benchmark, <00:13:06.241>OSB, <00:13:06.708>support.

222
00:13:09.088 --> 00:13:13.028
<00:13:09.088>That <00:13:09.204>really <00:13:09.321>eases <00:13:09.438>the <00:13:09.554>whole <00:13:09.671>configuration <00:13:09.788>of <00:13:09.904>it, <00:13:10.021>and <00:13:10.137>you <00:13:10.254>can <00:13:10.371>do <00:13:10.488>the

223
00:13:13.048 --> 00:13:16.788
<00:13:13.048>performance <00:13:13.281>testing <00:13:13.514>as <00:13:13.748>well. <00:13:13.981>So <00:13:14.214>that's <00:13:14.448>about

224
00:13:17.108 --> 00:13:18.908
<00:13:17.108>where <00:13:17.574>gRPC <00:13:18.041>stands <00:13:18.507>today.

225
00:13:19.868 --> 00:13:20.208
And

226
00:13:21.208 --> 00:13:25.168
<00:13:21.208>now <00:13:21.335>let <00:13:21.462>me <00:13:21.589>just <00:13:21.717>switch <00:13:21.844>the <00:13:21.971>gears <00:13:22.098>and <00:13:22.226>work <00:13:22.353>towards <00:13:22.480>how <00:13:22.608>to

227
00:13:25.268 --> 00:13:29.027
<00:13:25.268>really <00:13:25.548>configure <00:13:25.828>gRPC <00:13:26.108>here. <00:13:26.388>So <00:13:26.668>right

228
00:13:29.108 --> 00:13:32.548
<00:13:29.108>now <00:13:29.263>you <00:13:29.419>can <00:13:29.574>see <00:13:29.730>at <00:13:29.885>this <00:13:30.041>screenshot, <00:13:30.196>this <00:13:30.352>is <00:13:30.507>the

229
00:13:32.608 --> 00:13:36.568
<00:13:32.608>OpenSearch <00:13:32.808>configuration <00:13:33.007>YAML <00:13:33.208>file, <00:13:33.407>and <00:13:33.608>typically <00:13:33.808>it <00:13:34.007>will

230
00:13:36.608 --> 00:13:38.368
<00:13:36.608>not <00:13:37.074>have <00:13:37.541>any <00:13:38.007>gRPC

231
00:13:40.028 --> 00:13:43.848
<00:13:40.028>flags <00:13:40.183>or <00:13:40.339>any <00:13:40.494>gRPC <00:13:40.650>flags, <00:13:40.805>right? <00:13:40.961>So <00:13:41.116>you <00:13:41.272>can <00:13:41.428>just

232
00:13:43.888 --> 00:13:47.788
<00:13:43.888>quickly <00:13:44.015>go <00:13:44.142>and <00:13:44.269>go <00:13:44.397>onto <00:13:44.524>their <00:13:44.651>documentation, <00:13:44.778>which <00:13:44.906>I'm <00:13:45.033>going <00:13:45.160>to <00:13:45.288>share

233
00:13:47.828 --> 00:13:51.648
<00:13:47.828>in <00:13:48.002>the <00:13:48.178>later <00:13:48.353>slides, <00:13:48.528>and <00:13:48.703>configure <00:13:48.877>based <00:13:49.053>on <00:13:49.228>your

234
00:13:51.688 --> 00:13:54.888
<00:13:51.688>ports <00:13:51.888>that <00:13:52.088>you <00:13:52.288>have <00:13:52.488>configured <00:13:52.688>the <00:13:52.888>gRPC <00:13:53.088>onto.

235
00:13:55.248 --> 00:13:59.088
<00:13:55.248>What <00:13:55.348>is <00:13:55.448>the <00:13:55.548>binding <00:13:55.648>host <00:13:55.748>and <00:13:55.848>also <00:13:55.948>what <00:13:56.048>is <00:13:56.148>the <00:13:56.248>published <00:13:56.348>port <00:13:56.448>that <00:13:56.548>you <00:13:56.648>would

236
00:13:59.128 --> 00:14:02.968
<00:13:59.128>like <00:13:59.268>to <00:13:59.408>expose? <00:13:59.548>So <00:13:59.688>all <00:13:59.828>of <00:13:59.968>these <00:14:00.108>you <00:14:00.248>can <00:14:00.388>quickly <00:14:00.528>configure,

237
00:14:03.068 --> 00:14:06.548
<00:14:03.068>and <00:14:03.223>that's <00:14:03.379>how <00:14:03.534>it <00:14:03.690>really <00:14:03.845>works <00:14:04.001>at <00:14:04.156>the <00:14:04.312>config <00:14:04.468>layer.

238
00:14:08.028 --> 00:14:08.668
So

239
00:14:09.808 --> 00:14:13.788
<00:14:09.808>in <00:14:09.915>my <00:14:10.023>local <00:14:10.131>setup, <00:14:10.238>when <00:14:10.346>I <00:14:10.454>had <00:14:10.561>set <00:14:10.669>it <00:14:10.777>up, <00:14:10.884>I <00:14:10.992>had <00:14:11.100>a <00:14:11.208>publish

240
00:14:13.908 --> 00:14:17.868
<00:14:13.908>address, <00:14:14.063>as <00:14:14.219>you <00:14:14.374>can <00:14:14.530>see, <00:14:14.685>which <00:14:14.841>was <00:14:14.996>having <00:14:15.152>bounding <00:14:15.308>onto

241
00:14:17.888 --> 00:14:21.708
<00:14:17.888>the <00:14:18.063>port <00:14:18.238>9400. <00:14:18.413>So <00:14:18.588>I <00:14:18.763>could <00:14:18.938>have <00:14:19.113>quickly <00:14:19.288>configured

242
00:14:21.768 --> 00:14:25.488
<00:14:21.768>onto <00:14:22.001>my <00:14:22.234>local <00:14:22.468>host, <00:14:22.701>that <00:14:22.934>is <00:14:23.168>127.0.0.1

243
00:14:25.988 --> 00:14:29.788
<00:14:25.988>onto <00:14:26.143>9400. <00:14:26.299>So <00:14:26.454>you <00:14:26.610>can <00:14:26.765>quickly <00:14:26.921>go <00:14:27.076>to <00:14:27.232>the <00:14:27.388>config

244
00:14:29.848 --> 00:14:32.948
<00:14:29.848>and <00:14:30.048>just <00:14:30.247>set <00:14:30.448>the <00:14:30.647>bind <00:14:30.848>port <00:14:31.048>to <00:14:31.247>9400.

245
00:14:33.868 --> 00:14:37.818
<00:14:33.868>To <00:14:33.968>know <00:14:34.068>more <00:14:34.168>about <00:14:34.268>how <00:14:34.368>did <00:14:34.468>I <00:14:34.568>really <00:14:34.668>configure <00:14:34.768>it <00:14:34.868>up, <00:14:34.968>you <00:14:35.068>can <00:14:35.168>scan <00:14:35.268>this

246
00:14:37.928 --> 00:14:41.508
<00:14:37.928>QR. <00:14:38.035>It <00:14:38.143>will <00:14:38.251>take <00:14:38.358>you <00:14:38.466>to <00:14:38.574>the <00:14:38.681>detailed <00:14:38.789>steps <00:14:38.897>that <00:14:39.004>I <00:14:39.112>had <00:14:39.220>done <00:14:39.328>to

247
00:14:41.548 --> 00:14:44.518
<00:14:41.548>really <00:14:41.748>make <00:14:41.948>this <00:14:42.148>gRPC <00:14:42.348>server <00:14:42.548>up <00:14:42.748>and <00:14:42.948>running.

248
00:14:46.468 --> 00:14:49.788
<00:14:46.468>So <00:14:46.595>that <00:14:46.722>was <00:14:46.849>pretty <00:14:46.977>much <00:14:47.104>about <00:14:47.231>how <00:14:47.358>do <00:14:47.486>we <00:14:47.613>really <00:14:47.740>configure <00:14:47.867>it.

249
00:14:49.968 --> 00:14:53.928
<00:14:49.968>It's <00:14:50.247>really <00:14:50.527>that <00:14:50.808>simple <00:14:51.088>because, <00:14:51.367>to

250
00:14:53.948 --> 00:14:57.688
<00:14:53.948>be <00:14:54.048>frank, <00:14:54.148>it's <00:14:54.247>all <00:14:54.348>at <00:14:54.448>the <00:14:54.548>network <00:14:54.648>layer, <00:14:54.747>it's <00:14:54.848>all <00:14:54.948>at <00:14:55.048>the <00:14:55.148>transport <00:14:55.247>layer, <00:14:55.348>and

251
00:14:57.728 --> 00:14:58.968
<00:14:57.728>nothing <00:14:58.007>much <00:14:58.286>to <00:14:58.564>do <00:14:58.843>with

252
00:15:00.168 --> 00:15:03.908
<00:15:00.168>having <00:15:00.343>to <00:15:00.518>configure <00:15:00.693>something <00:15:00.868>apart <00:15:01.043>from <00:15:01.218>having <00:15:01.393>a <00:15:01.568>gRPC

253
00:15:03.948 --> 00:15:07.748
<00:15:03.948>server <00:15:04.088>run, <00:15:04.228>right? <00:15:04.367>So <00:15:04.507>now <00:15:04.648>I'm <00:15:04.788>going <00:15:04.928>to <00:15:05.068>just <00:15:05.208>quickly <00:15:05.348>walk

254
00:15:07.828 --> 00:15:11.748
<00:15:07.828>through <00:15:08.061>how <00:15:08.294>the <00:15:08.528>results <00:15:08.761>were <00:15:08.994>when <00:15:09.228>we

255
00:15:11.828 --> 00:15:14.368
<00:15:11.828>had <00:15:12.178>done <00:15:12.528>the <00:15:12.877>initial <00:15:13.228>benchmarking.

256
00:15:14.788 --> 00:15:18.768
<00:15:14.788>So <00:15:14.963>these <00:15:15.138>are <00:15:15.313>the <00:15:15.488>official <00:15:15.663>OpenSearch <00:15:15.838>benchmarking <00:15:16.013>results, <00:15:16.188>and

257
00:15:19.408 --> 00:15:23.308
<00:15:19.408>once <00:15:19.524>we <00:15:19.641>are <00:15:19.758>to <00:15:19.874>the <00:15:19.991>references <00:15:20.108>slide, <00:15:20.224>you <00:15:20.341>can <00:15:20.458>also <00:15:20.574>scan <00:15:20.691>that <00:15:20.808>QR

258
00:15:23.348 --> 00:15:24.608
<00:15:23.348>to <00:15:23.631>get <00:15:23.915>to <00:15:24.198>the <00:15:24.482>actual

259
00:15:25.428 --> 00:15:29.068
<00:15:25.428>document <00:15:25.628>format, <00:15:25.828>the <00:15:26.028>benching, <00:15:26.228>and <00:15:26.428>everything, <00:15:26.628>details, <00:15:26.828>right?

260
00:15:29.608 --> 00:15:31.828
<00:15:29.608>So <00:15:29.808>the <00:15:30.007>first <00:15:30.208>one <00:15:30.407>being <00:15:30.608>KNN <00:15:30.808>vector <00:15:31.007>search.

261
00:15:32.308 --> 00:15:36.238
<00:15:32.308>In <00:15:32.424>KNN <00:15:32.541>vector <00:15:32.658>search, <00:15:32.774>when <00:15:32.891>we <00:15:33.008>had <00:15:33.124>done <00:15:33.241>a <00:15:33.358>comparison <00:15:33.474>between <00:15:33.591>REST <00:15:33.708>and

262
00:15:36.308 --> 00:15:39.888
<00:15:36.308>gRPC, <00:15:36.541>what <00:15:36.774>we <00:15:37.008>had <00:15:37.241>observed <00:15:37.474>is <00:15:37.708>P50

263
00:15:39.968 --> 00:15:43.748
<00:15:39.968>latency <00:15:40.247>improved <00:15:40.527>by <00:15:40.808>4.74%, <00:15:41.088>and <00:15:41.367>the

264
00:15:43.788 --> 00:15:45.628
<00:15:43.788>mean <00:15:44.138>throughput <00:15:44.488>increased <00:15:44.838>by <00:15:45.188>around

265
00:15:45.648 --> 00:15:49.588
<00:15:45.648>17.24%. <00:15:45.998>That <00:15:46.348>is <00:15:46.698>allowing <00:15:47.048>the

266
00:15:49.648 --> 00:15:52.808
<00:15:49.648>same <00:15:49.823>cluster <00:15:49.998>to <00:15:50.173>handle <00:15:50.348>more <00:15:50.523>queries <00:15:50.698>per <00:15:50.873>second, <00:15:51.048>right?

267
00:15:52.828 --> 00:15:55.658
<00:15:52.828>So <00:15:53.028>that <00:15:53.228>is <00:15:53.428>having <00:15:53.627>a <00:15:53.828>mean <00:15:54.028>throughput <00:15:54.228>increase.

268
00:15:55.658 --> 00:15:57.108
<00:15:55.658>So <00:15:55.984>you <00:15:56.310>can <00:15:56.636>look <00:15:56.963>at

269
00:15:58.128 --> 00:16:02.037
<00:15:58.128>the <00:15:58.244>numbers <00:15:58.361>that <00:15:58.478>how <00:15:58.594>much <00:15:58.711>improvements <00:15:58.828>we <00:15:58.944>observed <00:15:59.061>in <00:15:59.178>the <00:15:59.294>latency <00:15:59.411>here <00:15:59.528>in

270
00:16:02.068 --> 00:16:05.868
<00:16:02.068>the <00:16:02.208>table, <00:16:02.348>and <00:16:02.488>here <00:16:02.627>how <00:16:02.768>much <00:16:02.908>improvement <00:16:03.048>we <00:16:03.188>observed <00:16:03.328>in <00:16:03.468>the

271
00:16:05.888 --> 00:16:08.868
<00:16:05.888>throughput, <00:16:06.238>that <00:16:06.588>was <00:16:06.938>around <00:16:07.288>17.24%.

272
00:16:08.928 --> 00:16:12.808
<00:16:08.928>So <00:16:09.035>that <00:16:09.143>was <00:16:09.251>only <00:16:09.358>for <00:16:09.466>KNN <00:16:09.574>vector <00:16:09.681>search, <00:16:09.789>but <00:16:09.897>when <00:16:10.004>we <00:16:10.112>look <00:16:10.220>at <00:16:10.328>the

273
00:16:12.828 --> 00:16:15.688
<00:16:12.828>bulk <00:16:13.108>ingestions, <00:16:13.387>the <00:16:13.668>numbers <00:16:13.948>were <00:16:14.228>massive.

274
00:16:16.268 --> 00:16:20.148
<00:16:16.268>And <00:16:16.408>to <00:16:16.548>talk <00:16:16.688>about <00:16:16.828>the <00:16:16.968>latency <00:16:17.108>reduction <00:16:17.248>that <00:16:17.388>we <00:16:17.528>got <00:16:17.668>was

275
00:16:20.208 --> 00:16:24.108
<00:16:20.208>by <00:16:20.363>22% <00:16:20.519>when <00:16:20.674>we <00:16:20.830>had <00:16:20.985>done <00:16:21.141>a <00:16:21.296>bulk <00:16:21.452>size. <00:16:21.608>So

276
00:16:24.528 --> 00:16:28.068
<00:16:24.528>we <00:16:24.761>are <00:16:24.994>considering <00:16:25.228>here <00:16:25.461>different <00:16:25.694>documents <00:16:25.928>per

277
00:16:28.128 --> 00:16:31.968
<00:16:28.128>request. <00:16:28.303>So <00:16:28.478>10,000, <00:16:28.653>around <00:16:28.828>the <00:16:29.003>benefits <00:16:29.178>that <00:16:29.353>we <00:16:29.528>got

278
00:16:32.088 --> 00:16:35.528
<00:16:32.088>was <00:16:32.321>16.2%, <00:16:32.554>and <00:16:32.788>the <00:16:33.021>reduction <00:16:33.254>in <00:16:33.488>latency,

279
00:16:35.888 --> 00:16:39.728
<00:16:35.888>P50 <00:16:36.088>latency, <00:16:36.288>was <00:16:36.488>22.6%. <00:16:36.688>So <00:16:36.888>there <00:16:37.088>were <00:16:37.288>different

280
00:16:39.738 --> 00:16:43.668
<00:16:39.738>documents <00:16:39.893>per <00:16:40.049>request <00:16:40.204>that <00:16:40.360>we <00:16:40.515>had <00:16:40.671>taken, <00:16:40.826>and <00:16:40.982>this <00:16:41.138>was

281
00:16:43.748 --> 00:16:44.748
<00:16:43.748>having <00:16:44.648>different

282
00:16:45.648 --> 00:16:47.978
<00:16:45.648>latency <00:16:45.998>improvements <00:16:46.348>and <00:16:46.698>payload <00:16:47.048>improvements.

283
00:16:48.628 --> 00:16:52.348
<00:16:48.628>And <00:16:48.803>the <00:16:48.978>payload <00:16:49.153>improvement <00:16:49.328>is <00:16:49.503>really <00:16:49.678>all <00:16:49.853>because <00:16:50.028>of

284
00:16:52.368 --> 00:16:55.728
<00:16:52.368>Protobuf, <00:16:52.568>the <00:16:52.768>binary <00:16:52.968>encoding <00:16:53.168>that <00:16:53.368>we <00:16:53.568>have <00:16:53.768>underneath.

285
00:16:56.288 --> 00:16:59.168
<00:16:56.288>So <00:16:56.488>this <00:16:56.688>was <00:16:56.888>having <00:16:57.088>for <00:16:57.288>the <00:16:57.488>bulk <00:16:57.688>ingestion.

286
00:17:00.248 --> 00:17:03.108
<00:17:00.248>And <00:17:00.423>if <00:17:00.598>you <00:17:00.773>want <00:17:00.948>to <00:17:01.123>quickly <00:17:01.298>get <00:17:01.473>started <00:17:01.648>with

287
00:17:04.209 --> 00:17:08.008
<00:17:04.209>how <00:17:04.409>I <00:17:04.609>can <00:17:04.809>experiment <00:17:05.009>locally <00:17:05.209>of <00:17:05.409>how <00:17:05.609>Persistent

288
00:17:08.108 --> 00:17:10.929
<00:17:08.108>Go <00:17:08.387>REST <00:17:08.667>and <00:17:08.947>Persistent <00:17:09.227>Go <00:17:09.508>gRPC

289
00:17:11.368 --> 00:17:15.268
<00:17:11.367>protocols <00:17:11.523>and <00:17:11.679>the <00:17:11.834>difference <00:17:11.990>in <00:17:12.145>the <00:17:12.301>latency <00:17:12.456>I <00:17:12.612>can <00:17:12.768>measure,

290
00:17:15.288 --> 00:17:18.888
<00:17:15.288>you <00:17:15.395>can <00:17:15.503>quickly <00:17:15.611>scan <00:17:15.718>this <00:17:15.826>another <00:17:15.934>QR, <00:17:16.041>which <00:17:16.149>will <00:17:16.257>take <00:17:16.364>you <00:17:16.472>directly <00:17:16.580>to <00:17:16.688>my

291
00:17:18.988 --> 00:17:22.868
<00:17:18.988>actual <00:17:19.188>GitHub <00:17:19.388>repo. <00:17:19.588>And <00:17:19.788>you <00:17:19.988>can <00:17:20.188>download <00:17:20.388>the

292
00:17:22.949 --> 00:17:26.748
<00:17:22.949>scripts <00:17:23.076>that <00:17:23.203>I <00:17:23.330>have <00:17:23.458>for <00:17:23.585>the <00:17:23.712>Persistent <00:17:23.839>Go <00:17:23.967>REST <00:17:24.094>and <00:17:24.221>Persistent <00:17:24.349>Go

293
00:17:26.969 --> 00:17:30.638
<00:17:26.969>gRPC <00:17:27.096>scripts, <00:17:27.223>and <00:17:27.350>you <00:17:27.478>can <00:17:27.605>locally <00:17:27.732>run <00:17:27.859>it <00:17:27.987>after <00:17:28.114>you <00:17:28.241>have <00:17:28.369>really

294
00:17:30.668 --> 00:17:34.358
<00:17:30.668>configured <00:17:30.842>the <00:17:31.017>gRPC <00:17:31.193>server. <00:17:31.368>So <00:17:31.543>when <00:17:31.717>I <00:17:31.892>had <00:17:32.068>done

295
00:17:34.428 --> 00:17:37.838
<00:17:34.428>this, <00:17:34.555>these <00:17:34.682>were <00:17:34.809>the <00:17:34.937>numbers <00:17:35.064>that <00:17:35.191>I <00:17:35.318>had <00:17:35.446>observed, <00:17:35.573>and <00:17:35.700>that <00:17:35.828>was

296
00:17:37.888 --> 00:17:41.658
<00:17:37.888>around <00:17:38.088>22% <00:17:38.288>lower <00:17:38.487>latency <00:17:38.687>with <00:17:38.888>gRPC <00:17:39.088>when <00:17:39.288>it

297
00:17:41.688 --> 00:17:45.428
<00:17:41.688>comes <00:17:41.888>to <00:17:42.088>having <00:17:42.288>the <00:17:42.488>same <00:17:42.688>index, <00:17:42.888>same <00:17:43.088>query,

298
00:17:45.528 --> 00:17:49.428
<00:17:45.528>having <00:17:45.668>the <00:17:45.808>same <00:17:45.948>data <00:17:46.088>set, <00:17:46.228>and <00:17:46.368>having <00:17:46.508>one <00:17:46.648>persistent <00:17:46.788>connection, <00:17:46.928>right?

299
00:17:49.908 --> 00:17:53.708
<00:17:49.908>So <00:17:50.048>that <00:17:50.187>was <00:17:50.328>my <00:17:50.467>local <00:17:50.608>experiment <00:17:50.747>that <00:17:50.888>I <00:17:51.027>had <00:17:51.168>ran, <00:17:51.308>and

300
00:17:54.048 --> 00:17:56.928
<00:17:54.048>the <00:17:54.328>previous <00:17:54.608>ones <00:17:54.888>were <00:17:55.168>actually <00:17:55.448>OpenSearch

301
00:17:57.768 --> 00:18:01.408
<00:17:57.768>benchmarking <00:17:57.908>that <00:17:58.048>was <00:17:58.188>done <00:17:58.328>based <00:17:58.468>on <00:17:58.608>different <00:17:58.748>document <00:17:58.888>size, <00:17:59.028>different <00:17:59.168>document

302
00:18:01.508 --> 00:18:03.728
<00:18:01.508>format, <00:18:01.788>and <00:18:02.068>different <00:18:02.348>documents <00:18:02.628>per <00:18:02.908>request.

303
00:18:05.648 --> 00:18:08.768
<00:18:05.648>So, <00:18:05.822>coming <00:18:05.997>on <00:18:06.173>to <00:18:06.348>the <00:18:06.523>main <00:18:06.697>slide, <00:18:06.872>which <00:18:07.048>is:

304
00:18:09.548 --> 00:18:12.328
<00:18:09.548>Where <00:18:09.748>is <00:18:09.948>the <00:18:10.148>performance <00:18:10.348>gain <00:18:10.548>really <00:18:10.748>coming <00:18:10.948>from?

305
00:18:12.568 --> 00:18:16.228
<00:18:12.568>So, <00:18:12.743>when <00:18:12.918>we <00:18:13.093>are <00:18:13.268>talking <00:18:13.443>about <00:18:13.618>gRPC, <00:18:13.793>the <00:18:13.968>compact

306
00:18:16.288 --> 00:18:20.228
<00:18:16.288>payload <00:18:16.463>that <00:18:16.638>we <00:18:16.813>are <00:18:16.988>getting <00:18:17.163>is <00:18:17.338>all <00:18:17.513>from <00:18:17.688>the

307
00:18:20.268 --> 00:18:23.848
<00:18:20.268>payload <00:18:20.501>size <00:18:20.734>that <00:18:20.968>is <00:18:21.201>really <00:18:21.434>less, <00:18:21.668>53%

308
00:18:23.888 --> 00:18:27.528
<00:18:23.888>reduction <00:18:24.028>in <00:18:24.168>the <00:18:24.308>payload <00:18:24.447>size. <00:18:24.588>And <00:18:24.727>that <00:18:24.868>is <00:18:25.007>all <00:18:25.148>because <00:18:25.288>of

309
00:18:28.048 --> 00:18:31.947
<00:18:28.048>reducing <00:18:28.188>network <00:18:28.328>transfer <00:18:28.468>time. <00:18:28.608>The <00:18:28.748>lesser <00:18:28.888>the <00:18:29.028>payload, <00:18:29.168>the <00:18:29.308>less <00:18:29.448>the

310
00:18:31.988 --> 00:18:34.828
<00:18:31.988>transfer <00:18:32.163>time, <00:18:32.338>the <00:18:32.513>lesser <00:18:32.688>the <00:18:32.863>parsing <00:18:33.038>will <00:18:33.213>be <00:18:33.388>happening.

311
00:18:35.108 --> 00:18:38.968
<00:18:35.108>The <00:18:35.215>lesser <00:18:35.323>bytes <00:18:35.431>that <00:18:35.538>we <00:18:35.646>are <00:18:35.754>transferring <00:18:35.861>between <00:18:35.969>the <00:18:36.077>clients <00:18:36.184>and <00:18:36.292>the <00:18:36.400>server <00:18:36.508>side,

312
00:18:39.148 --> 00:18:41.548
<00:18:39.148>so <00:18:39.428>lesser <00:18:39.707>CPU <00:18:39.987>utilization <00:18:40.267>in <00:18:40.548>turn.

313
00:18:42.028 --> 00:18:45.968
<00:18:42.028>So, <00:18:42.183>all <00:18:42.339>of <00:18:42.494>these <00:18:42.650>really <00:18:42.805>is <00:18:42.961>cascading, <00:18:43.116>fewer <00:18:43.272>bytes <00:18:43.428>transferred,

314
00:18:46.048 --> 00:18:49.648
<00:18:46.048>less <00:18:46.203>parsing <00:18:46.359>to <00:18:46.514>be <00:18:46.670>done, <00:18:46.825>more <00:18:46.981>persistent <00:18:47.136>connections <00:18:47.292>that <00:18:47.448>we

315
00:18:49.708 --> 00:18:52.968
<00:18:49.708>have, <00:18:49.941>lesser <00:18:50.174>processing <00:18:50.408>time <00:18:50.641>that <00:18:50.874>it <00:18:51.108>needs,

316
00:18:53.168 --> 00:18:57.108
<00:18:53.168>and <00:18:53.401>in <00:18:53.634>turn, <00:18:53.868>faster <00:18:54.101>serialization <00:18:54.334>and <00:18:54.568>deserialization.

317
00:18:57.708 --> 00:19:01.368
<00:18:57.708>So, <00:18:57.883>this <00:18:58.058>really <00:18:58.233>is <00:18:58.408>all <00:18:58.583>because <00:18:58.758>of <00:18:58.933>compact <00:18:59.108>payload.

318
00:19:02.108 --> 00:19:05.968
<00:19:02.108>Also, <00:19:02.283>there <00:19:02.457>is <00:19:02.633>HTTP/2 <00:19:02.808>that <00:19:02.983>comes <00:19:03.158>up <00:19:03.332>with <00:19:03.508>gRPC,

319
00:19:06.668 --> 00:19:08.648
<00:19:06.668>and <00:19:07.017>that <00:19:07.368>is <00:19:07.717>having <00:19:08.068>multiplexing

320
00:19:10.608 --> 00:19:14.348
<00:19:10.608>support <00:19:10.783>that <00:19:10.957>really <00:19:11.133>allows <00:19:11.308>concurrent <00:19:11.483>bulk <00:19:11.658>request <00:19:11.832>over <00:19:12.008>a

321
00:19:14.388 --> 00:19:15.698
<00:19:14.388>single <00:19:14.682>connection, <00:19:14.977>so <00:19:15.272>you <00:19:15.567>can

322
00:19:16.888 --> 00:19:20.368
<00:19:16.888>do <00:19:17.168>more <00:19:17.447>with <00:19:17.727>lesser <00:19:18.007>connections. <00:19:18.288>So,

323
00:19:20.908 --> 00:19:24.608
<00:19:20.908>if <00:19:21.035>you <00:19:21.162>had <00:19:21.289>one <00:19:21.417>connection, <00:19:21.544>you <00:19:21.671>can <00:19:21.798>have <00:19:21.926>multiplexing <00:19:22.053>to <00:19:22.180>send <00:19:22.308>more

324
00:19:24.648 --> 00:19:28.328
<00:19:24.648>concurrent <00:19:24.803>bulk <00:19:24.959>request. <00:19:25.114>And <00:19:25.270>this <00:19:25.425>is <00:19:25.581>really <00:19:25.736>wonderful <00:19:25.892>when <00:19:26.048>it

325
00:19:28.368 --> 00:19:31.928
<00:19:28.368>comes <00:19:28.648>to <00:19:28.928>having <00:19:29.207>multi-distributed <00:19:29.487>architecture <00:19:29.768>systems.

326
00:19:33.808 --> 00:19:34.948
<00:19:33.808>So, <00:19:34.834>I

327
00:19:38.948 --> 00:19:42.828
<00:19:38.948>should <00:19:39.123>not <00:19:39.298>be <00:19:39.473>saying <00:19:39.648>this, <00:19:39.823>that <00:19:39.998>gRPC <00:19:40.173>is <00:19:40.348>the

328
00:19:42.888 --> 00:19:46.828
<00:19:42.888>best <00:19:43.043>one. <00:19:43.199>It <00:19:43.354>is <00:19:43.510>good, <00:19:43.665>but <00:19:43.821>there <00:19:43.976>are <00:19:44.132>few <00:19:44.288>use

329
00:19:46.868 --> 00:19:50.628
<00:19:46.868>cases <00:19:47.023>where <00:19:47.179>still <00:19:47.334>REST <00:19:47.490>wins, <00:19:47.645>and <00:19:47.801>that <00:19:47.956>is <00:19:48.112>when <00:19:48.268>you

330
00:19:50.688 --> 00:19:54.608
<00:19:50.688>come <00:19:50.968>for <00:19:51.248>simplicity, <00:19:51.528>having <00:19:51.808>debugging-friendly <00:19:52.088>output,

331
00:19:54.868 --> 00:19:57.248
<00:19:54.868>also <00:19:55.334>having <00:19:55.801>broader <00:19:56.268>compatibility.

332
00:19:57.888 --> 00:20:01.708
<00:19:57.888>So, <00:19:58.043>if <00:19:58.199>you <00:19:58.354>want <00:19:58.510>really <00:19:58.665>your <00:19:58.821>REST <00:19:58.976>to <00:19:59.132>be <00:19:59.288>simple,

333
00:20:01.848 --> 00:20:05.668
<00:20:01.848>having <00:20:02.197>ecosystem <00:20:02.548>compatibility, <00:20:02.898>REST <00:20:03.248>still

334
00:20:05.768 --> 00:20:07.108
<00:20:05.768>wins <00:20:06.371>because <00:20:06.974>gRPC,

335
00:20:07.988 --> 00:20:11.868
<00:20:07.988>everything <00:20:08.115>is <00:20:08.242>binary <00:20:08.369>encoded. <00:20:08.497>You <00:20:08.624>won't <00:20:08.751>really <00:20:08.878>see, <00:20:09.006>and <00:20:09.133>it's <00:20:09.260>really <00:20:09.388>not

336
00:20:11.928 --> 00:20:13.547
<00:20:11.928>debug-friendly. <00:20:13.328>So,

337
00:20:14.348 --> 00:20:17.728
<00:20:14.348>gRPC <00:20:14.523>is <00:20:14.697>really <00:20:14.873>best <00:20:15.048>for <00:20:15.223>service-to-service <00:20:15.398>communication, <00:20:15.572>which <00:20:15.748>is

338
00:20:17.788 --> 00:20:21.648
<00:20:17.788>node-to-node <00:20:18.021>internal <00:20:18.254>microservices <00:20:18.488>that <00:20:18.721>are <00:20:18.954>communicating <00:20:19.188>over

339
00:20:21.688 --> 00:20:25.248
<00:20:21.688>each <00:20:21.921>other. <00:20:22.154>So <00:20:22.388>bulk <00:20:22.621>ingestions, <00:20:22.854>KNN, <00:20:23.088>vector

340
00:20:25.348 --> 00:20:28.828
<00:20:25.348>search, <00:20:25.464>all <00:20:25.581>of <00:20:25.697>these <00:20:25.814>really <00:20:25.931>fit <00:20:26.048>in <00:20:26.164>best <00:20:26.281>for <00:20:26.398>gRPC, <00:20:26.514>but <00:20:26.631>some <00:20:26.748>of

341
00:20:28.908 --> 00:20:32.828
<00:20:28.908>the <00:20:29.108>APIs <00:20:29.308>are <00:20:29.507>still <00:20:29.707>using <00:20:29.908>REST <00:20:30.108>as <00:20:30.308>one

342
00:20:32.888 --> 00:20:33.518
<00:20:32.888>of <00:20:33.455>these

343
00:20:34.428 --> 00:20:38.288
<00:20:34.428>transport <00:20:34.777>layer <00:20:35.128>protocol, <00:20:35.477>and <00:20:35.828>when

344
00:20:38.368 --> 00:20:41.888
<00:20:38.368>we <00:20:38.543>discuss <00:20:38.717>of <00:20:38.893>that <00:20:39.068>automated <00:20:39.243>pipeline, <00:20:39.418>that's <00:20:39.592>how <00:20:39.768>in

345
00:20:41.928 --> 00:20:45.608
<00:20:41.928>OpenSearch <00:20:42.083>we <00:20:42.239>maintain <00:20:42.394>both <00:20:42.550>of <00:20:42.705>these <00:20:42.861>together, <00:20:43.016>REST <00:20:43.172>and <00:20:43.328>gRPC.

346
00:20:47.268 --> 00:20:50.648
<00:20:47.268>So, <00:20:47.408>that's <00:20:47.548>all <00:20:47.688>that <00:20:47.828>I <00:20:47.968>had <00:20:48.108>for <00:20:48.248>today <00:20:48.388>on <00:20:48.528>to <00:20:48.668>how

347
00:20:50.658 --> 00:20:54.168
<00:20:50.658>gRPC <00:20:50.832>was <00:20:51.007>added, <00:20:51.183>and <00:20:51.358>these <00:20:51.533>are <00:20:51.707>few <00:20:51.882>of <00:20:52.058>the

348
00:20:54.308 --> 00:20:54.928
actual

349
00:20:55.948 --> 00:20:59.628
<00:20:55.948>GitHub <00:20:56.064>repositories. <00:20:56.181>The <00:20:56.298>first <00:20:56.414>one <00:20:56.531>being <00:20:56.648>my <00:20:56.764>local <00:20:56.881>repository, <00:20:56.998>and <00:20:57.114>the <00:20:57.231>second <00:20:57.348>one

350
00:20:59.688 --> 00:21:03.648
<00:20:59.688>being <00:20:59.828>the <00:20:59.968>actual <00:21:00.108>issue <00:21:00.248>that <00:21:00.388>really <00:21:00.528>added <00:21:00.668>up <00:21:00.808>the <00:21:00.948>gRPC <00:21:01.088>support.

351
00:21:03.988 --> 00:21:04.968
<00:21:03.988>So <00:21:04.282>you <00:21:04.576>can <00:21:04.870>quickly

352
00:21:05.828 --> 00:21:09.328
<00:21:05.828>reference <00:21:06.028>this <00:21:06.228>and <00:21:06.428>understand <00:21:06.628>more <00:21:06.828>details <00:21:07.028>about <00:21:07.228>it.

353
00:21:11.128 --> 00:21:14.648
<00:21:11.128>These <00:21:11.235>are <00:21:11.343>few <00:21:11.451>of <00:21:11.558>the <00:21:11.666>documents <00:21:11.774>that <00:21:11.881>I <00:21:11.989>was <00:21:12.097>referring <00:21:12.204>to <00:21:12.312>when <00:21:12.420>I <00:21:12.528>was

354
00:21:14.968 --> 00:21:17.368
<00:21:14.968>talking <00:21:15.248>about <00:21:15.528>how <00:21:15.808>you <00:21:16.088>can <00:21:16.368>configure,

355
00:21:17.508 --> 00:21:21.348
<00:21:17.508>how <00:21:17.708>OpenSearch <00:21:17.908>is <00:21:18.108>really <00:21:18.308>looking <00:21:18.508>forward <00:21:18.708>to <00:21:18.908>it.

356
00:21:21.828 --> 00:21:25.528
<00:21:21.828>So <00:21:21.944>right <00:21:22.061>now, <00:21:22.178>in <00:21:22.294>3.2, <00:21:22.411>as <00:21:22.528>we <00:21:22.644>discussed, <00:21:22.761>there's <00:21:22.878>only <00:21:22.994>KNN <00:21:23.111>and <00:21:23.228>bulk

357
00:21:25.588 --> 00:21:29.568
<00:21:25.588>ingestions, <00:21:25.704>but <00:21:25.821>what <00:21:25.937>is <00:21:26.054>the <00:21:26.171>project <00:21:26.288>roadmap <00:21:26.404>that <00:21:26.521>is <00:21:26.638>looking <00:21:26.754>forward <00:21:26.871>to <00:21:26.988>adding

358
00:21:29.588 --> 00:21:33.548
<00:21:29.588>more <00:21:29.695>APIs? <00:21:29.803>So <00:21:29.911>that's <00:21:30.018>the <00:21:30.126>first <00:21:30.234>QR <00:21:30.341>that <00:21:30.449>looks <00:21:30.557>up <00:21:30.664>to <00:21:30.772>how <00:21:30.880>the <00:21:30.988>project

359
00:21:33.568 --> 00:21:37.408
<00:21:33.568>roadmap <00:21:33.743>looks <00:21:33.918>like. <00:21:34.093>The <00:21:34.268>other <00:21:34.443>three <00:21:34.618>QR <00:21:34.793>that <00:21:34.968>you

360
00:21:37.468 --> 00:21:41.148
<00:21:37.468>see <00:21:37.643>are <00:21:37.818>having <00:21:37.993>documentations <00:21:38.168>of <00:21:38.343>how <00:21:38.518>Uber <00:21:38.693>is <00:21:38.868>really

361
00:21:41.168 --> 00:21:44.988
<00:21:41.168>using <00:21:41.368>OpenSearch <00:21:41.568>with <00:21:41.767>gRPC, <00:21:41.967>and <00:21:42.168>they <00:21:42.368>were <00:21:42.568>the

362
00:21:45.028 --> 00:21:48.408
<00:21:45.028>major <00:21:45.183>contributors <00:21:45.339>onto <00:21:45.494>it, <00:21:45.650>and <00:21:45.805>they <00:21:45.961>had <00:21:46.116>done <00:21:46.272>the <00:21:46.428>benchmarking.

363
00:21:48.488 --> 00:21:52.428
<00:21:48.488>So <00:21:48.588>you <00:21:48.688>can <00:21:48.788>quickly <00:21:48.888>scan <00:21:48.988>these <00:21:49.088>QRs <00:21:49.188>and <00:21:49.288>get <00:21:49.388>to <00:21:49.488>know <00:21:49.588>of <00:21:49.688>how <00:21:49.788>the <00:21:49.888>benchmarking

364
00:21:52.468 --> 00:21:53.848
<00:21:52.468>result <00:21:52.778>turned <00:21:53.089>out <00:21:53.399>for <00:21:53.710>them.

365
00:21:55.248 --> 00:21:57.328
<00:21:55.248>What <00:21:55.448>was <00:21:55.648>the <00:21:55.848>document <00:21:56.048>format <00:21:56.248>that <00:21:56.448>they <00:21:56.648>had.

366
00:21:58.328 --> 00:22:02.168
<00:21:58.328>So <00:21:58.483>all <00:21:58.639>of <00:21:58.794>those <00:21:58.950>details <00:21:59.105>and <00:21:59.261>technicalities <00:21:59.416>are <00:21:59.572>in <00:21:59.728>these

367
00:22:02.208 --> 00:22:05.888
<00:22:02.208>blogs. <00:22:02.363>So <00:22:02.519>please <00:22:02.674>reference <00:22:02.830>this <00:22:02.985>and <00:22:03.141>give <00:22:03.296>it <00:22:03.452>a <00:22:03.608>read.

368
00:22:07.388 --> 00:22:11.008
<00:22:07.388>Apart <00:22:07.528>from <00:22:07.668>that, <00:22:07.808>I <00:22:07.947>would <00:22:08.088>really <00:22:08.227>like <00:22:08.368>to <00:22:08.507>take <00:22:08.648>this <00:22:08.788>platform

369
00:22:12.068 --> 00:22:15.608
<00:22:12.068>to <00:22:12.268>encourage <00:22:12.468>more <00:22:12.668>and <00:22:12.868>more <00:22:13.068>contributions <00:22:13.268>onto <00:22:13.468>OpenSearch

370
00:22:16.248 --> 00:22:17.208
<00:22:16.248>because <00:22:16.680>it's <00:22:17.112>been

371
00:22:18.148 --> 00:22:22.138
<00:22:18.148>two <00:22:18.288>years <00:22:18.428>that <00:22:18.568>I'm <00:22:18.707>contributing <00:22:18.848>to <00:22:18.987>open <00:22:19.128>source <00:22:19.267>and <00:22:19.408>OpenSearch, <00:22:19.548>and

372
00:22:22.168 --> 00:22:25.538
<00:22:22.168>there's <00:22:22.308>never <00:22:22.447>a <00:22:22.588>dull <00:22:22.727>moment. <00:22:22.868>Trust <00:22:23.007>me, <00:22:23.148>it's <00:22:23.287>always <00:22:23.428>about <00:22:23.568>learning

373
00:22:25.648 --> 00:22:29.188
<00:22:25.648>and <00:22:25.848>getting <00:22:26.048>to <00:22:26.247>know <00:22:26.447>more <00:22:26.648>things. <00:22:26.848>So <00:22:27.048>it's

374
00:22:29.208 --> 00:22:32.868
<00:22:29.208>still <00:22:29.408>open, <00:22:29.608>the <00:22:29.808>call <00:22:30.008>for <00:22:30.208>maintainers <00:22:30.408>and <00:22:30.608>contributors.

375
00:22:33.288 --> 00:22:36.948
<00:22:33.288>So <00:22:33.428>if <00:22:33.568>you <00:22:33.708>are <00:22:33.848>really <00:22:33.988>interested <00:22:34.128>in <00:22:34.268>Go, <00:22:34.408>please <00:22:34.548>take <00:22:34.688>this

376
00:22:37.008 --> 00:22:40.768
<00:22:37.008>opportunity <00:22:37.183>to <00:22:37.358>interact <00:22:37.533>with <00:22:37.708>more <00:22:37.883>and <00:22:38.058>more <00:22:38.233>developers <00:22:38.408>who

377
00:22:40.848 --> 00:22:42.208
<00:22:40.848>are <00:22:41.256>taking <00:22:41.664>this <00:22:42.072>effort

378
00:22:43.068 --> 00:22:46.728
<00:22:43.068>and <00:22:43.268>sustaining <00:22:43.468>the <00:22:43.668>open <00:22:43.868>source <00:22:44.068>community <00:22:44.268>and <00:22:44.468>ecosystem.

379
00:22:47.268 --> 00:22:51.138
<00:22:47.268>Please, <00:22:47.501>we <00:22:47.734>look <00:22:47.968>forward <00:22:48.201>to <00:22:48.434>your <00:22:48.668>contributions,

380
00:22:51.208 --> 00:22:51.788
<00:22:51.208>and <00:22:51.730>also,

381
00:22:53.348 --> 00:22:56.808
<00:22:53.348>even <00:22:53.488>if <00:22:53.628>you <00:22:53.768>do <00:22:53.908>not <00:22:54.048>contribute, <00:22:54.187>but <00:22:54.328>you <00:22:54.467>are <00:22:54.608>really <00:22:54.748>using

382
00:22:56.868 --> 00:23:00.468
<00:22:56.868>gRPC <00:22:57.023>in <00:22:57.179>OpenSearch, <00:22:57.334>we <00:22:57.490>really <00:22:57.645>want <00:22:57.801>to <00:22:57.956>hear <00:22:58.112>your <00:22:58.268>feedback

383
00:23:00.528 --> 00:23:04.388
<00:23:00.528>and <00:23:00.683>know <00:23:00.839>about <00:23:00.994>the <00:23:01.150>performance <00:23:01.305>improvement <00:23:01.461>and <00:23:01.616>gains <00:23:01.772>that <00:23:01.928>you

384
00:23:04.448 --> 00:23:06.188
<00:23:04.448>got <00:23:04.798>by <00:23:05.148>latency <00:23:05.498>and <00:23:05.848>improvements.

385
00:23:07.068 --> 00:23:10.988
<00:23:07.068>So <00:23:07.243>yeah, <00:23:07.418>this <00:23:07.593>is <00:23:07.768>a <00:23:07.943>good <00:23:08.118>platform <00:23:08.293>that <00:23:08.468>we

386
00:23:11.028 --> 00:23:12.108
<00:23:11.028>really <00:23:11.352>look <00:23:11.676>forward <00:23:12.000>to.

387
00:23:13.748 --> 00:23:16.828
<00:23:13.748>So <00:23:13.923>that's <00:23:14.098>all <00:23:14.273>that <00:23:14.448>I <00:23:14.623>had <00:23:14.798>for <00:23:14.973>today, <00:23:15.148>and

388
00:23:17.888 --> 00:23:21.488
<00:23:17.888>I <00:23:18.004>know <00:23:18.121>this <00:23:18.237>is <00:23:18.354>an <00:23:18.471>online <00:23:18.588>platform, <00:23:18.704>so <00:23:18.821>we <00:23:18.937>can't <00:23:19.054>directly <00:23:19.171>interact <00:23:19.288>with

389
00:23:21.968 --> 00:23:25.928
<00:23:21.968>face-to-face, <00:23:22.095>and <00:23:22.222>I <00:23:22.349>can't <00:23:22.477>really <00:23:22.604>take <00:23:22.731>your <00:23:22.858>questions, <00:23:22.986>but <00:23:23.113>I <00:23:23.240>am <00:23:23.368>always

390
00:23:25.968 --> 00:23:28.368
<00:23:25.968>active <00:23:26.168>on <00:23:26.368>LinkedIn. <00:23:26.568>This <00:23:26.768>is <00:23:26.968>my <00:23:27.168>LinkedIn <00:23:27.368>profile.

391
00:23:28.788 --> 00:23:32.618
<00:23:28.788>You <00:23:28.895>can <00:23:29.003>reach <00:23:29.111>out <00:23:29.218>to <00:23:29.326>me <00:23:29.434>on <00:23:29.541>LinkedIn <00:23:29.649>any <00:23:29.757>point <00:23:29.864>in <00:23:29.972>time, <00:23:30.080>and <00:23:30.188>also

392
00:23:32.648 --> 00:23:36.558
<00:23:32.648>there's <00:23:32.881>an <00:23:33.114>Slack <00:23:33.348>channel <00:23:33.581>of <00:23:33.814>OpenSearch, <00:23:34.048>where

393
00:23:36.708 --> 00:23:40.608
<00:23:36.708>I <00:23:36.848>am <00:23:36.988>always <00:23:37.128>active. <00:23:37.268>So <00:23:37.408>you <00:23:37.548>can <00:23:37.688>quickly <00:23:37.828>reach <00:23:37.968>out <00:23:38.108>to

394
00:23:40.628 --> 00:23:41.788
<00:23:40.628>me <00:23:40.976>if <00:23:41.324>there's <00:23:41.672>anything

395
00:23:42.768 --> 00:23:46.288
<00:23:42.768>that <00:23:42.895>you <00:23:43.022>have. <00:23:43.149>And <00:23:43.277>also <00:23:43.404>I <00:23:43.531>would <00:23:43.658>look <00:23:43.786>forward <00:23:43.913>to <00:23:44.040>your <00:23:44.168>feedback

396
00:23:46.588 --> 00:23:46.808
if

397
00:23:47.888 --> 00:23:50.708
<00:23:47.888>I <00:23:48.028>can <00:23:48.168>improve <00:23:48.308>on <00:23:48.447>anything <00:23:48.588>that <00:23:48.727>you <00:23:48.868>would <00:23:49.007>want <00:23:49.148>me <00:23:49.288>to.

398
00:23:51.328 --> 00:23:55.208
<00:23:51.328>So, <00:23:51.435>that's <00:23:51.543>all <00:23:51.651>that <00:23:51.758>I <00:23:51.866>had <00:23:51.974>for <00:23:52.081>today, <00:23:52.189>and <00:23:52.297>I <00:23:52.404>would <00:23:52.512>really <00:23:52.620>like <00:23:52.728>to

399
00:23:55.248 --> 00:23:56.708
<00:23:55.248>thank <00:23:56.562>WeAreDevelopers

400
00:23:57.728 --> 00:24:01.588
<00:23:57.728>whole <00:23:57.855>team <00:23:57.982>to <00:23:58.109>give <00:23:58.237>me <00:23:58.364>an <00:23:58.491>opportunity <00:23:58.618>to <00:23:58.746>really <00:23:58.873>share <00:23:59.000>my <00:23:59.128>expertise

401
00:24:01.688 --> 00:24:02.188
<00:24:01.688>with <00:24:02.138>the

402
00:24:03.368 --> 00:24:06.928
<00:24:03.368>open <00:24:03.601>source <00:24:03.834>technical <00:24:04.068>people <00:24:04.301>who <00:24:04.534>are <00:24:04.768>really

403
00:24:07.488 --> 00:24:10.588
<00:24:07.488>enthusiastic <00:24:07.663>about <00:24:07.838>everything <00:24:08.013>that <00:24:08.188>comes <00:24:08.363>up <00:24:08.538>new <00:24:08.713>in <00:24:08.888>OpenSearch.

404
00:24:10.888 --> 00:24:14.868
<00:24:10.888>So <00:24:11.028>yeah, <00:24:11.168>looking <00:24:11.308>forward <00:24:11.447>to <00:24:11.588>it <00:24:11.727>and <00:24:11.868>hearing <00:24:12.007>your <00:24:12.148>feedback, <00:24:12.288>and

405
00:24:14.968 --> 00:24:17.538
<00:24:14.968>I <00:24:15.143>look <00:24:15.318>for <00:24:15.493>the <00:24:15.668>next <00:24:15.843>year <00:24:16.018>as <00:24:16.193>well. <00:24:16.368>Bye-bye.

406
00:24:17.808 --> 00:24:19.067
<00:24:17.808>See <00:24:18.941>you!